摘要:一、描述 为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。 角色 (1)子系统类:实现该子系统功能。 (2)外观类:包含各个子系统的功能,为多个子系统对外提供统一接口。 (3)客户类:访问外观类的统一接口 二、优点 (1)减少系统依赖,降低客户端调用系统难度。 (2)提高灵活性 (
阅读全文
摘要:

一、描述 装饰模式能够在不改变原来对象结构和功能的前提下,动态的给对象增加新的功能,相比于使用子类扩展的方式,装饰模式更加的灵活。 角色 (1)抽象构件类:为具体构件类和装饰类提供抽象方法。 (2)具体构建类:是抽象构建类的子类,实现抽象方法,用于定义具体的构件对象。 (3)抽象装饰类:是抽象构件类
阅读全文
摘要:

一、描述 将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 角色: 1.抽象化角色:给出定义,并保存一个对实现化对象的引用。 2.扩展抽象化角色:扩展抽象化角色、改变和扩展父类对抽象化的定义 3.实现化角色:这个角色给出实现化角色的
阅读全文
摘要:

一、描述 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 1.角色 (1)目标类(target):定义Client使用的与特定领域相关的接口。 (2)客户端类(Client):与符合Target接口的对象协同。 (3)需要适配的接口类(Adapt
阅读全文
摘要:

一、描述 给定一个语言,定义它的文法的一种标识,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式为自定义语言的设计和实现提供了一种解决方案,它用于定义一组文法规则并通过这组文法规则来解释语言中的句子。 1.角色: (1)抽象表达式类(AbstractExpression):定义处
阅读全文
摘要:

一、描述 定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复至原来保存的状态。 理解:当需要保存某个对象的操作数据或者该对象状态时,使用另外一个类记录原始对象的数据以及状态,以便回退到以前的某种数据。 角色: 1.Originator(原发器):
阅读全文
摘要:

一、描述 提供一种方法来访问聚合对象,而不暴露这个对象的内部表示,其别名为游标。聚合对象提供数据以及数据访问功能,若聚合对象变化的话,数据访问也要同步修改,不符合开闭原则。在客户访问和聚合对象之间插入迭代器,实现解耦。迭代器模式可以为不同的容器提供一致的遍历行为,而不用关心容器内容元素组成结构 角色
阅读全文
摘要:

一、描述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。也称为发布-订阅模式。 角色: 1.抽象目标类:除自身业务逻辑外,包含增加、删除、唤醒观察者功能。 2.具体目标类:为那些在目标发生改变时需获取通知的对象定义一个更新接口。 2.抽象观察
阅读全文
摘要:

一、描述 允许一个对象在其内部状态发生改变时改变其行为能力。对象的行为依赖于它的状态,并且可以根据它的状态改变而改变它的相关行为。每个状态通过持有Contetxt的引用,来实现状态转移。 一个对象的状态改变了,那么他的操作也会随之改变。 角色: 1.使用环境角色(Context):根据不同的状态在相
阅读全文
摘要:

一、描述: 把请求从链中的一个对象传到下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 角色: 1.抽象处理者角色:定义处理的抽象方法,可以设置具体处理
阅读全文
摘要:

一、描述 将一个请求封装为一个对象,使请求者和接收者分离开来,实现解耦。可以提供命令的撤销和恢复功能。 角色: 1.请求者:发出请求,调用命令。 2.抽象命令类:定义抽象接口。 3.具体命令类:实现抽象命令类中的抽象接口,将命令发送给接收者。 4.接收者:接收命令,并且做出相关操作。 类图: 二、优
阅读全文
摘要:一、描述 定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。 1.角色 (1)抽象类:定义算法方法。 (2)具体实现类:继承抽象类,实现算法方法。 2.类图 二、 以快速排序算法、合并排序算法为例,类图很简单,和上面的类图差不多,所以就不画了。直接上代码
阅读全文
摘要:一、描述 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 角色: 1.抽象模板类:负责定义算法方法 2.具体模板类:实现抽象模板类方法 类图: 二、优点 1.封装不变部分,扩展可变部分 2.提取公共代码,便于维护 3.行为由父类
阅读全文
摘要:

一、描述 是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。建造者模式按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)。 角色包含以下分类: 产品(Product):产品以及其包含的属性。 抽象建造者(
阅读全文
摘要:

一、描述 提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。不同于工厂方法模式,工厂方法模式的工厂只能生产一种产品。 抽象工厂的角色分类: 1.抽象产品:定义产品的使用方法。 2.具体产品:实现抽象产品,定义了该种产品的具体使用方法。 3.抽象工厂:定义生产产品的功能。 4.具体工厂:实
阅读全文
摘要:一、描述 定义一个用于创建产品的接口,由子类工厂决定生产什么产品。解决了简单工厂模式破坏开闭原则的弊端 工厂方法模式的角色包含: 1.抽象工厂:构造了一个生产产品的接口方法。 2.具体工厂:指定生产某种产品,实现了抽象工厂的接口方法。 3.抽象产品:定义了一系列产品的通用使用方法。 4.具体产品:某
阅读全文
摘要:在工厂模式的大类中,具体有三个小的子类模式,包含简单工厂模式、工厂方法模式、抽象工厂模式。其中简单工厂模式并没有放到23种设计模式中,但是对于理解另外两种设计模式有重要作用。这篇文章中,主要介绍一下简单工厂模式: 一、描述 简单工厂模式有一个具体的工厂类,可以生成多个不同的产品。 该模式的使用场景为
阅读全文