设计模式(3)

来源:互联网 发布:贵州大数据交易平台 编辑:程序博客网 时间:2024/05/17 23:07

命令模式:将“请求”封装成对象,以便使用不同的请求、队列、日志来参数化其他对象。命令模式也支持可撤销的操作。

1、将动作的请求者从动作的执行者对象中解耦出来。

2、在被解耦的两者之间是通过命令对象进行沟通的,命令对象封装了接收者和一个或一组动作。

3、调用者通过调用命令对象的execute()发出请求,这会使得接收者的动作被调用。

4、调用者可以接受命令当作参数,甚至在运行时动态的进行。

5、宏命令是命令的最简单的延伸,允许调用多个命令。

6、命令可以支持撤销,实现一个undo()方法来回到execute()被执行前的状态。

用途:队列请求,日志请求,事物系统。


适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

1、当需要使用一个现有的类,而其接口并不符合你的需求时,就使用适配器模式。

2、适配器有对象适配器(使用组合)和类适配器(使用继承)



外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

1、当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观模式。

2、最少知识原则。


模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

1、代码复用。

2、抽象类可以定义具体方法、抽象方法、钩子。

3、钩子是一种方法,他在抽象类中不做事,或者只做默认的事情,子类可以选择要不要去覆盖他。

4、策略模式和模板模式都是封装算法,一个用组合,一个用继承。

5、工厂方法是模板方法的一种特殊版本。


迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。


组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构,组合能让客户以一致的方式处理个别对象以及对象组合。


状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的状态。

1、状态模式允许一个对象基于内部状态而拥有不同的行为。

2、通过将每个状态封装进一个类,我们把以后需要做的任务改变局部化了。


代理模式:为另一个对象提供一个替身或占位符以访问这个对象。

1、结构上类似装饰者模式。