定义 将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。 动机 由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度, 乃至多个纬度的变化。 如何应对这种“多维度的变化”?如何利用面向对象技术来使得 类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂 度? 结构 要点 Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固 有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。所谓 抽象和实现沿着各自纬度的变化,即“子类化”它们。 Bridge模式有时候类似于多继承方案,…

2018年3月30日 0条评论 2862点热度 0人点赞 icebmji 阅读全文

定义 动态(组合)地给一个对象增加一些额外的职责。就增加功 能而言,Decorator模式比生成子类(继承)更为灵活(消 除重复代码 & 减少子类个数)。 动机 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”, 由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性; 并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展 功能的组合)会导致更多子类的膨胀。 如何使“对象功能的扩展”能够根据需要来动态地实现?同时避 免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能 扩展变化”所导致…

2018年3月29日 0条评论 2482点热度 0人点赞 icebmji 阅读全文

定义 定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。 动机 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关 系” ——一个对象(目标对象)的状态发生改变,所有的依赖对 象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密, 将使软件不能很好地抵御变化。 使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定 的依赖关系。从而实现软件体系结构的松耦合。 结构 要点 使用面向对象的抽象,Observer模式使得我们可以…

2018年3月29日 0条评论 3102点热度 0人点赞 icebmji 阅读全文

定义 定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化) 动机 在软件构建过程中,某些对象使用的算法可能多种多样,经常改 变,如果将这些算法都编码到对象中,将会使对象变得异常复杂; 而且有时候支持不使用的算法也是一个性能负担。 如何在运行时根据需要透明地更改对象的算法?将算法与对象本 身解耦,从而避免上述问题? 结构 要点 Strategy及其子类为组件提供了一系列可重用的算法,从而可以使 得类型在运行时方便地根据需要在各个算法之…

2018年3月27日 0条评论 3064点热度 0人点赞 icebmji 阅读全文

定义 定义一个操作中的算法的骨架 (稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法的某些特定步骤。 动机 在软件构建过程中,对于某一项任务,它常常有稳定的整体操作 结构,但各个子步骤却有很多改变的需求,或者由于固有的原因 (比如框架与应用之间的关系)而无法和任务的整体结构同时实现。 如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变 化或者晚期实现需求? 结构 要点 Template Method模式是…

2018年3月26日 0条评论 3180点热度 0人点赞 icebmji 阅读全文

GOF角度模式分类 创建型(Creational)模式:将对象的部分创建工作延迟到子 类或者其他对象,从而应对需求变化为对象创建时具体类型实 现引来的冲击 结构型(Structural)模式:通过类继承或者对象组合获得更灵 活的结构,从而应对需求变化为对象的结构带来的冲击 行为型(Behavioral)模式:通过类继承或者对象组合来划分 类与对象间的职责,从而应对需求变化为多个交互的对象带来 的冲击 从封装变化角度对模式分类 组建协助: Template Method Observer / Event Strate…

2018年3月26日 0条评论 2259点热度 0人点赞 icebmji 阅读全文

基本认知 程序员既要有逻辑思维也要有抽象思维 三大机制:封装,隐藏内部实现、继承,复用现有代码、多态,改写对象行为 人类在解决复杂问题时通常的方案:分解,将复杂的问题分解为多个已知的、可解决的简单问题、抽象,忽视问题的非本质细节,处理泛化的、理想的对象模型 复用,不重复造轮子 面向对象构建方式能够更适用软件的变化 面向对象设计的几个原则 依赖倒置原则(Dependency inversion principle,DIP) 在传统的应用架构中,低层次的组件设计用于被高层次的组件使用,这一点提供了逐步的构建一个复杂系统…

2018年3月26日 0条评论 2655点热度 0人点赞 icebmji 阅读全文