1.适配器模式
类适配器
对象适配器
默认适配器模式
2.桥梁模式
将抽象化与实现脱耦,使得二者可以独立的变化
桥接:为被分离了的抽象部分和实现部分来搭桥
如何桥接:桥接在程序上就体现成了在抽象部分拥有实现部分的接口对象
谁来桥接的问题:
就是谁来负责创建抽象部分和实现部分的关系
3.组合模式 Composite
将对象组合成树形解雇以表示"整体-部分"的层次结构
4.享元模式 FlyWeight
采用一个共享来避免大量拥有相同内容对象的开销
5.责任链模式
当客户提交一个请求时,从第一个对象开始,链中收到请求的对象要么亲自处理它,要么转发给链中的下一个候选者。
6.模板模式
定义了一个操作中的算法骨架,将一些步骤延迟到子类中。
基本方法:基本方法也称为基本操作,是由子类实现的方法,并且再模板方法中调用
模板方法:一般是一个具体的方法,也就是一个骨架,实现对基本方法的调度完成固定的逻辑
钩子方法:由抽象类申明并加以实现
7.命令模式:从界面设计中提取出来的一种分离耦合,提高重用的方法,被认为是最
优雅最简单的模式
命令模式的接收者:接受者可以是任意的类,对它没有什么特殊要求,这个对象知
道如何真正执行命令的操作,执行时是从command的实现类里面调转过来
智能命令:代替接收者实现命令要求的功能
发起请求的对象和真正实现的对象是解耦的
Receiver
Command
Invoker
Client
8.状态模式
允许一个对象在其内部状态改变的时候改变其行为。状态模式的功能就是分离状态的行为,通过维护状态的变化,来调用不同状态对应的不同功能。也就是说:状态和行为是相关联的,它们的关系可以描述为:状态决定行为。
9.外观模式(Facade)
为一个复杂子系统提供一个简单接口
提供子系统额独立性
在层次化结构中,可以使用Facade模式定义系统中的每一层的入口
10.策略模式(Strategy)
策略模式又称为算法族模式,就是定义了不同的算法族,并且相互之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
策略模式属于对象行为型模式。
策略模式中存在如下几个对象:
环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用
抽象策略模式:它可由接口或抽象类来实现
具体抽象模式:它封装了实现不同功能的不同算法
11.访问者模式(Visitor)
行为作为访问者,被访问对象接受,然后由访问对象执行
12.观察者模式(Observer)
对象的行为型模式,又叫发表-订阅模式
抽象主题角色
抽象观察者角色
具体主题角色
具体观察者角色
观察者模式的优点
观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体的观察者列表,每一个具体的观察者都符合一个抽象观察者接口。
观察者模式支持广播通信
观察者模式
如果一个被观察者对象有很多的直接和间接的观察者的话,将所有观察者都通知到会花费很多时间
如果在被观察者之间存在循环依赖,被观察者会触发它们之间的循环调用,导致系统崩溃
如果对观察者的通知是通过另外的线程进行异步投递的话,系统必须保证投递是以自洽的方式进行
13.中介者模式
用一个中介对象来封装一系列交互对象
Mediator: 中介者接口
ConcreteMediator: 具体中介者实现对象。它需要维护各个同事对象之间的交互关系
Colleague: 同事类定义,所有具体同事类的父类,通常实现成抽象类,主要负责约束同事对象的类型,并实现一些具体同事类之间的功能。
ConcreteColleague: 具体的同事类,实现自己的业务,在需要与其他同事通信的时候,就与持有的中介者通信,中介者负责与其他同事进行交互。
广义中介者
去掉同事对象的父类
同事不定义Mediator接口,把具体的中介者实现成单例
同事对象不再持有中介者对象,而是在具体处理方法里面创建,或者获取,或者从参数传入需要的同事对象
14.备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
原发起类(Originator) 创建一个备忘对象,使用备忘录存储它的内部状态
负责人类(CareTaker) 负责保存好备忘录对象,不能检查或者操作备忘录的内容
备忘录类(Memento) 将原发器的内部状态存储起来,原发器根据需要决定备忘录存储原发器的哪些内部状态。防止原发器以外的其他对象访问备忘录。备忘录有两个接口,一个是窄接口,一个是宽接口。CareTaker 只能看到窄接口,它只能把备忘录传递给其他对象。相反,Originator看到是一个宽接口,允许它访问返回到先前状态所需的数据
15.代理模式
代理模式也称为委托模式,它是一项基本设计技巧。需要其他的模式(例如状态模式、策略模式、访问者模式)本质上是在更特殊的场合采用了代理模式。而且在日常的应用中,代理模式可以提供非常好的访问控制。
Subject(抽象主题角色) 普通的业务类型定义
RealSubject(具体主题角色)业务逻辑的具体执行者
Proxy(代理主题角色) 负责对真实角色的应用,且对真实角色处理完毕的事情做预处理和善后工作
普通代理
强制代理
虚拟代理
代理模式总结
职责清晰:真实的角色就是实现实际的业务逻辑,无须关心其他非本职职责的事务,通过后期的代理完成一件事务。
高扩展性:具体主题角色是随时都会发生变化的,只要它实现了接口,便被接口的规范约定
16.装饰模式
装饰模式包裹真实对象
17.工厂模式
简单工厂模式
不满足OCP原则,是为了提供接口实例化的选择
工厂方法模式
为了满足OCP原则而生
抽象工厂模式
对简单工厂模式的维度切分做了更加细致的规范
18.单例模式
系统级别存在一个唯一的实例
饿汉式加载
懒汉式加载 -- 需要使用同步锁机制进行
双重检验加锁 -- 为了解决懒汉式加载的性能慢问题,但是需要使用一个关键字volatile
静态内部类加载 -- 通过静态内部类方式解决性能问题
19. 建造者模式
将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,关于内部是如何建造成成品的,调用者无需关系,实际设计与施工解耦,互不干扰。
20. 原型模式的总结
相比new的方式创建对象,原型模式性能优良
直接通过clone复制,构造函数是不会执行的
21. 迭代器
将数据存储和数据遍历的职责分离,增加新的聚合类需要对应增加新的迭代器类。