设计模式 - 命令模式(Command pattern)

定义 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 类型 对象行为模式 适用性 以下情况适用命令模式: 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互; 系统需要在不同的时间指定请求、将请求排队和执行请求; 系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作; 系统需...

设计模式 - 责任链模式(Chain-of-responsibility pattern)

定义 使多个对象有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 类型 对象行为模式 适用性 以下情况适用责任链模式: 有多个对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定; 想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求; 可处理一个请求的对象集合应该被动态制定...

设计模式 - 迭代器模式(Iterator)

定义 提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。 类型 对象行为模式 适用性 以下情况适用模板方法模式: 访问一个聚合对象的内容而无需暴露它的内部表示; 支持对聚合对象的多种遍历; 为遍历不同的聚合结构提供一个统一的接口(即支持多态迭代) 结构 参与者 迭代器(Iterator): 定义访问和遍历元素的接口; 具体迭代器(Co...

设计模式 - 观察者(Observer)

定义 定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。 类型 对象行为模式 适用性 以下情况适用模板方法模式: 当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这二者封装在独立的对象中以使他们可以各自独立地改变和复用。 当对一个对象的改变需要同步改变其他对象,而不知道具体有多少对象有待改变; 当一个对象必须...

设计模式 - 模板方法(Template Method)

定义 定义一些操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 类型 对象行为模式 结构 参与者 抽象类(AbstractClass): 定义抽象的原语操作。它的方法包括两类: 基本方法:也叫做基本操作,是由子类实现的方法,并且在模板方法被调用。 模板方法:可以有一个或几个,一般是一个具体方法,也就是一个...

设计模式 - 策略模式(Strategy)

定义 定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。策略模式使得算法可以独立于使用它的客户而变化。 类型 对象行为模式 适用性 以下情况适用策略模式: 许多相关的类仅仅是行为有异,策略模式提供了一种用多个行为中的一个行为来配置一个类的方法; 需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间 / 时间权衡的算法。当这些变体实现为一个算法的类层次...

设计模式 - 享元模式(Flyweight)

定义 运用共享技术有效的支持大量细粒度对象。 适用性 以下情况适用享元(Flyweight)模式: 一个应用程序使用了大量对象; 完全由于使用了大量的对象,造成很大的存储开销; 对象的大多数状态都可变为外部状态; 如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象; 应用程序不依赖于对象标识。由于code>Flyweight</code...

设计模式 - 组合模式(Composite)

定义 将对象组合成树形结构以表示”整体 - 部分”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 类型 结构性模式 适用性 以下情况适用组合(Composite)模式: 当希望表示对象的整体-部分层次结构时; 当希望用户忽略组合对象和单个对象的不同,用户将统一的使用组合结构中的所有对象时; 结构 参与者 抽象组件(Component)...

设计模式 - 桥接模式(Bridge)

定义 将抽象部分与实现部分分离,使它们都可以独立的变化。 类型 结构性模式 适用性 以下情况适用桥接(Bridge)模式: 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系; 抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响,在程序运行时可以动态将一个抽象化子类的...

设计模式 - 外观模式(Facade)

定义 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得子系统更加容易使用。 类型 结构性模式 适用性 以下情况适用Facade模式: 当需要为一个复杂的子系统提供一个简单的接口时; 客户端与抽象类的实现部分存在很大依赖性时,引入Facade模式将子系统与客户及其他子系统进行分离,可以提高子系统的独立性和可移植性; 当需要构建一个层...