设计模式基础总结!

基本概念

封装

通过对类的封装,仅仅暴露少许必要的方法给调用方使用,调用方不需要了解太多背后的业务细节,大大降低了用错的概率,提高了代码的易用性。

抽象

通过抽象化只暴露出方法定义,而隐藏方法的具体实现,让调用者只需要关心方法提供了哪些功能,并不需要知道这些功能是如何实现的。

作用:通过抽象化手段,没有暴露出来实现细节,所以当后来改变具体的实现细节时,对于调用方来说不需要或仅有少量修改,提高了代码的可扩展性和可维护性。

继承

表示类之间is-a的关系,比如猫是一种哺乳动物。

作用:最大的一个好处就是提高了代码的复用性。

多态

一个父类有多个不同的子类,而且多个子类都可以替换父类去使用。

作用:提高代码的可扩展性和复用性。

面向对象和面向过程

面向对象编程:以类为组织代码的基本单元,面向过程编程:以过程(或方法)作为组织代码的基本单元。

面向过程编程:数据和方法相分离。不支持丰富的面向对象编程特性,比如继承、多态、封装。

UML

关联关系

泛化:

  • 继承关系,符号:空心三角箭头的实线,箭头指向父类。

实现:

  • 类与接口的关系,表达类实现了接口的特征行为,符号:带三角箭头的虚线,箭头指向接口。

组合:

  • 整体与部分的关系,但部分不能离开整体而单独存在,符号:带实心菱形的实线,菱形指向整体。

聚合:

  • 整体和部分关系,且部分可以离开整体而单独存在,符号:空心菱形的实心线,菱形指向整体。

关联:

  • 类和类的关系,表达一个类知道另一个类的属性和方法,符号:带普通箭头(或实心三角形箭头)的实心线。

依赖:

  • 使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖,符号:带箭头的虚线,指向被依赖的类。

img

类图表示方法

从上到下分为3部分:类名、属性、方法。

符号含义:+ public、- private、#protected

img

建造者模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

构造器模式使用多个简单的对象一步一步构建成一个复杂的对象。

它提供了一种创建对象的最佳方式。

UML类图:

img

访问者模式

表示一个作用于某对象结构中的各元素的操作。

它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

UML类图:

img

原型模式

用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。

UML类图:

img

组合模式

将对象组合成树形结构以表示部分-整体的层次结构,它使得客户对单个对象和复合对象的使用具有一致性。

UML类图:

img

装饰器模式

动态地给一个对象添加一些额外的职责,就扩展功能而言,它比生成子类方式更为灵活。

UML类图:

img

外观模式

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

外观模式Fcade不一定是接口,也可以是类,例如只有FacadeImpl这个类。

  • Interface1、Interface2、Interface3都是子系统接口。

  • 使用Facade即可实现对3个子系统的调用。

UML类图:

img

享元模式

运用共享技术来有效地支持大量细粒度对象的复用。

它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。

UML类图:

img

命令模式

将一个请求封装为一个命令对象,使发出请求、执行请求解耦。

UML类图:

img

解释器模式

给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。

UML类图:

img

迭代器模式

提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

UML类图:

img

中介者模式

用一个中介对象来封装一系列的对象交互。

中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

UML类图:

img

备忘录模式

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

  • 这样以后就可将该对象恢复到保存的状态。

UML类图:

img

观察者模式

定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

UML类图:

img

状态模式

允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类。

UML类图:

img