全栈工程师成神之路--设计模式

@wanqiuz 2018-07-17 01:25:23发表于 wanqiuz/blog-articles 全栈工程师成神之路

六种关系

泛化关系(generalization)

是一种 is-a的关系;
泛化关系用一条带空心箭头的直接表示

实现关系(realize)

实现关系用一条带空心箭头的虚线表示

聚合关系(aggregation)

是一种弱的整体和部分的关系
聚合关系用一条带空心菱形箭头的直线表示

组合关系(composition)

是一种强的整体和部分的关系
组合关系用一条带实心菱形箭头直线表示,

关联关系(association)

关联关系是用一条直线表示的;它描述不同类的对象之间的结构关系;它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的;它一般用来定义对象之间静态的、天然的结构; 所以,关联关系是一种“强关联”的关系;
比如,乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系;

依赖关系(dependency)

依赖关系是用一套带箭头的虚线表示的;他描述一个对象在运行期间会用到另一个对象的关系;
与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化; 依赖关系也可能发生变化;
显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生;
注:在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系除了临时知道对方外,还是“使用”对方的方法和属性;

创建型模式

创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。

包含模式:

  • 简单工厂模式(Simple Factory)
    concreteFactory AbstractProduct
  • 工厂方法模式(Factory Method)
    AbstractFactory AbstractProduct
  • 抽象工厂模式(Abstract Factory)
    AbstractFactory AbstractProduct1 AbstractProduct2 AbstractProduct3
  • 建造者模式(Builder)
    重叠构造器对变量顺序有要求,不适用变量很多的情形;Java Beans通过提供无参构造函数和setter,可能拿到构造不完整的数据,不能对final类型变量赋值
  • 原型模式(Prototype)
  • 单例模式(Singleton)
    恶汉式、懒汉式

结构型模式

结构型模式(Structural Pattern)描述如何将类或者对 象结合在一起形成更大的结构,就像搭积木,可以通过 简单积木的组合形成复杂的、功能更为强大的结构。
结构型模式可以分为类结构型模式和对象结构型模式:

  • 类结构型模式关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。
  • 对象结构型模式关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。 根据“合成复用原则”,在系统中尽量使用关联关系来替代继 承关系,因此大部分结构型模式都是对象结构型模式。

包含模式:

  • 适配器模式(Adapter)
  • 代理模式(Proxy)
  • 外观模式(Facade)
  • 组合模式(Composite)
  • 装饰模式(Decorator)
  • 桥接模式(Bridge)
  • 享元模式(Flyweight)

行为型模式

行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。
行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。
通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象 之间的交互。在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能,一个对象在运行时也将影响到其他对象的运行。
行为型模式分为类行为型模式和对象行为型模式两种:

  • 类行为型模式:类的行为型模式使用继承关系在几个类之间分配行为,类行为型模式主要通过多态等方式来分配父类与子类的职责。
  • 对象行为型模式:对象的行为型模式则使用对象的聚合关联关系来分配行为,对象行为型模式主要是通过对象关联等方式来分配两个或多个类的职责。根据“合成复用原则”,系统中要尽量使用关联关系来取代继承关系,因此大部分行为型设计模式都属于对象行为型设计模式。

包含模式:

  • 策略模式(Strategy)
  • 观察者模式(Observer)
  • 迭代器模式(Iterator)
  • 命令模式(Command)
  • 状态模式(State)
  • 模板方法模式(Template Method)
  • 职责链模式(Chain of Responsibility)
  • 访问者模式(Visitor)
  • 解释器模式(Interpreter)
  • 中介者模式(Mediator)
  • 备忘录模式(Memento)