常用设计模式总结,附完整图解

UML类图

类图定义规则

属性和方法前加上(+、-、#、留空)分别代表:公开(public)、私有(private)、保护(protected)、缺省(default)

方法括号内为参数类型,冒号后为返回值类型

下划线表示 静态(static),斜体表示 抽象(abstract)

类图关系表示法

其中 关联、聚合、组合,比较容易混淆,它们的区别:

关联:描述的是两个独立实体之间的连接,它们可以独立存在。

聚合:描述的是整体和部分之间的关系,部分可以独立于整体存在。

组合:描述的是一种更强的整体和部分关系,部分不能独立于整体存在。

依赖 和 关联 的主要区别在于:

依赖是临时性的,而关联是长期性的。

依赖关系通常表示一个类使用另一个类,而关联关系表示对象之间的结构关系。

七个原则

开闭原则

对扩展开放,对修改关闭。

即程序要设计成扩展新功能时,只需添加新代码,而无需修改现有代码。

里氏替换原则

子类可以当作父类使用,且替换后不改变运行结果。

单一职责原则

一个类只负责一个职责。

依赖倒转原则

高层模块不应该依赖底层模块,抽象不应该依赖于细节。

接口隔离原则

接口应该小而完备,避免大而臃肿。不因该强迫实现类实现不该有的功能。

合成复用原则

在代码复用时,优先使用组合、聚合、关联的方式,其次考虑继承方式。

组合、聚合、关联、继承的区别可参考上面《类图关系表示法》。

最少知道原则(别称: 迪米特法则

一个类对于其他类知道的越少越好。

扩展:高内聚低耦合

要注意,下图是以类的角度。从方法的角度来看,方法之间互调频繁,也是耦合。

创建型

单例模式

1.饿汉式

缺点:类加载后立刻创建对象,较占资源。

2.懒汉式

优点:按需加载。

缺点:使用锁来保证并发安全,代码较复杂。

3.内部类式

优点:懒汉式改进版,使用JVM机制取代了锁,同样能保证并发安全的情况下,代码更简单了。

简单工厂模式

优点:客户和具体商品解耦。

缺点:工厂里硬编码所有商品,每次添加新商品需要修改工厂代码,违反开闭原则。

工厂方法模式

特点:添加新商品只需新建对应工厂,无需修改其他代码,符合开闭原则。

抽象工厂模式

特点:每个品牌工厂可以生产多种类型的商品。

建造者模式

定义:将一个对象的建造步骤、顺序、细节进行分离。

抽象建造者:定义构建产品的步骤。

具体建造者:实现每个步骤。

指挥者:决定步骤的执行顺序。

结构型

代理模式

定义:通过代理类来访问被代理类。

桥接模式

定义:将抽象与实现分离,使它们都可以独立地变化。

适配器模式

定义:通过包装,让类兼容特定接口。

装饰器模式

定义:通过包装,实现功能动态扩展。

行为型

观察者模式

定义:对象可以被订阅,并主动通知订阅者。

策略模式

定义:使策略能动态的切换。

模板方法模式

定义:将可变的方法延迟到子类实现。

状态模式

定义:把类功能按不同状态进行分离。

迭代器模式

List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

责任链模式

定义:多个处理者按序连接,每个处理者决定是否处理请求、是否调用后序。