最近打算再学习一遍设计模式,希望能进一步掌握掌握
创建型模式
处理对象的创建问题
抽象工厂 abstractfacory
核心:在于实际的工厂可以生产相互配合的,有相同特征的全部产品
生产器:builder
有些对象如此复杂并且灵活,因此它的创建应该由单独的对象负责,以保证足够的灵活
工厂方法: factory method
核心:把产品的建立延迟到子类中进行
原型: prototype
自己克隆自己,并完成赋值
单件: singletion
只允许唯一的对象,并且只存在于整个系统的生存期内
结构型模式
如何组合类与对象,以获得更大的结构
适配器:adapter
主要目的是为了两个互不兼容的数据格式之间进行信息格式转换【透明转换】
桥接: bridge
桥接也是一种连接,核心在于双接口
一接口:收缩了一组子类对另一组类的访问方式,或者说功能需求
一接口:收缩了所有的服务方法,或者说功能实现方法
装饰:decorator
利用继承机制,扩展父类,再包含一个父类对象
在需要转变的对象上加一层包装,这层包装负责接收请求,然后将这个请求转发给真实的对象
组合:composite
对象可以包含其他的同类对象,是一种层层嵌套的树状结构
实际上有两类对象实现这个接口
一是简单的对象,就是leaf类,它的内部不会再包含其他的对象
一是真正的组合类,可包含叶子对象,也可包含自身的对象
外观:facade
为子系统中的一组接口提供一个一致的界面,使得子系统更加容易使用
享元:flyweight
核心是许多对象的状态被分为两类,
一类是对象固有的状态【内部状态】
一类是对象使用时状态【外部状态】
享元模式中,这两种状态是分开的,对象的使用者保存外部状态,对象自己保存内部状态,
显然,这个时候需要为每个不同的外部状态生成一个不同的对象
代理:proxy
核心就是设法截断客户和实际服务者之间的联系,代为转发
代理的类包含实际服务对象句柄,然后进行转发
行为模式
约束和设定对象的行为,发挥特定的功能,关注对象方法职责和对象间的协作方式
责任链:
责任链模式针对这样一类应用的:
某个用户对系统发出请求,但是客户并不清楚也不打算清除内部具体那个对象能够完成这个请求,因此,请求会被沿着一条处理链传递下去,直到有对象反应,并且收到了这个请求为止。
命令:
核心是把原来完成操作的方法,封装为对象,并且拥有统一的管理接口。
用户负责创建对象并制定接收者,接收者完成具体的命令操作
解释器: interpreter
客户负责访问文本,然后把文本传递给解释器
解释器由非终止表达式和终止表达式组成
迭代器: interator
它的工作实际上是对列表的元素进行列举
迭代器的核心思想是把列表元素的存储和列表元素的访问分离
中介者:
用一个中介者类封装合作者之间的交互
原本两个对象直接交互,现在通过中介者进行
备忘录:
为对象设立一个备忘录对象,记录对象的历史状态
在不破坏封装性的前提下,扑获一个对象的内部状态,并在该对象外,保存该状态
状态:
通过巧妙的手段使的对象变成状态驱动的,对象的行为受限于它的状态
把不同的行为和状态关联起来成为单独的子类,这样,依照不同的对象状态,实际创建了不同的子类对象,也就意味着不同的行为
观察者:
存在一个订阅和分发的类来完成操作
策略:
可以实现算法的相互替换,封装的是同一操作的不同的实现
本来有一个方法完成的功能,现在由对象去完成,不同对象使用不同的算法
模板:
核心是把算法进一步分解,凡是灵活的部分都交给子类处理
访问者:
核心:定义两个类层次的抽象
一个对应接受操作的元素,即访问的元素
一个对应元素的访问者
访问者按照被访问者提供的方式查询被访问者的数据,然后进行自己的处理
由被访问者自行规整数据,为访问者提供服务