面试题 设计模式专题

1. Singleton(单件) Pattern
意图:保证一个类只有一个实例,并且提供一个访问他的
全局访问点。
例如,美国总统的任期就是一个Singleton模式的例子,因为在每段任期内只能有一个总统。而且不论谁是总统,“美国总统”的称号都是指向某个特定的个人。
2.Factory Method
(工厂方法,虚构造器
意图:定义一个创建对象的接口,让子类决定实例化哪个类。 Factory Method使一个类的实例化延迟到其子类。
例如,在铸造成型的过程中,制造者首先将塑料加工成可成型的粉末,然后将塑料粉末注入到需要的模具中。在Factory Method模式中,子类 (在这里就是指模具)来决定需要实例化那个类。在这个例子中,ToyHorseMold类就是被实例化的类。
3.Abstract Factory(抽象工厂
意图:提供一个创建一系列相关或者相互依赖对象的接口,
不要指定它们的具体类。

例如,
在汽车制造中,金属片冲压设备是Abstract Factory模式的
一个例子,它用来制造汽车的部件。用滚筒(rollers)来改变
模具(dies),就可以改变这样的具体对象(模具的加工品)。
这些具体的对象包括:引擎罩、车的中轴、车顶、左右的前
端挡板等。汽车的主控部分要确保所有这些具体的对象都是
兼容的。
4.Builder(生成器)
意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示结果。
例如,快餐店用Builder模式来制作专门针对儿童的快餐。由于儿童的口味五花八门,因此菜单内容也需要经常变化(例如:主食、饮料、或者玩具等),尽管如此,制作儿童快餐的过程是不变的。注意:Builder和Abstract Factory模式的差异,Builder返回的是完成的产品,而Abstract Factory返回的是一组相关的部分。
5.Prototype(原型)
意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
例如,一个细胞核的分裂可以生成两个同样基因型的细胞。而细胞的“克隆”就是Prototype模式的一个例子。源细胞在这里作为一个主动的角色(active role),创建它自己的新实例。
6.Adapter(适配器)
意图:将一个类的接口转换成用户希望的另一个接口。使得原来由于接口不兼容而不能在一起工作的那些类可以在一起工作。
例如,一个1/2英寸的防倒转齿轮不可能和一个1/4英寸的插槽配合工作。使用Adapter模式,阴口和1/2英寸的防倒转齿轮接合,阳口和1/4英寸的插槽接合。这样两个部件就能够顺利工作。
7.Flyweight(享元)
意图:利用共享技术有效地支持大量细粒度的对象。
例如,大多数打电话者都不知道音频发生器(比如:拨号音、忙音、或记录音)池的数目比打电话人的数目少得多。而拨号音发生器就是Flyweight模式的一个例子。 电信上网IP地址
8.Façade (统一外部界面)
意图:为系统中的一组接口提供一个一致的界面;
定义一个高层接口,这个接口使得这一系统或者子
系统更加容易使用。

例如,
救护服务中心包括针对不同救护目的仪器设备。例如:
针对不同的救护等级,需要配置不同的设备和技术要求
的人员,儿科救护,直升飞机等。另一方面,需要救护
的人员必须很容易的使用救护系统,即:播打求助热线
9.Composite(组合) Pattern
意图:将对象组合成树形结构以表示“部分-整体”的层次结构。
Composite使得用户对单个对象和组合对象的使用具有一致性。
例如,算术表达式能够用树结构来表示,其中操作数可以是一
个数字或者一个算术表达式。如果我们把单个对象(数字),和
单个对象的组合(子数学表达式)同等地对待,这个算术表达式
就是一个Composite模式的例子。
10.Decorator(装饰)
意图:动态地给一个对象添加一些额外的职责。
例如,绘画作品可以带画框或者不带画框地挂在墙上。通常,我们都是把画镶边,配上画框后再挂到墙上。这里,画、画框、和镶边构成了一个可视的构件。
11.Proxy(代理)
意图:为其它对象提供一种代理以控制这个对象的访问。
如旅行社。
12.Bridge(桥接)
意图:将抽象部分与它的实现部分分开,使它们都可以独立变化。
例如,开关是用来控制灯泡、吊扇、垃圾处理器等各种设备的打开和闭合,通过使用Bridge模式,我们可以将开关的具体实现和抽象的开关类分离开来。

行为协调:abstraction将Client的请求发给它的Implementor。
13.Observer(观察者) Pattern
意图:定义对象间的一对多的依赖关系,当一个对象的状态
发生改变时,所有依赖于它的对象都得到通知并被自动更新。


例如,注册了某公司产品质量保证书的客户就象投标人
(observers)。当该产品的安全记录发生改变时(例如需要召回
产品时),所有注册的客户都将被通知。
14. State(状态) Pattern
意图:允许一个对象在其内部状态改变时改变它的行为。对象看
起来似乎修改了它的类。分离状态与状态改变的处理行为。


例如,自动售货机的行为会根据它所处的状态而不断变化。比如说:已经投入售货机的钱、可选货物清单、用户的选择、和售货机里所剩的用于找零的硬币,等等都属于售货机状态的一部分
15. Chain of Responsibility
意图:使多个对象都有机会处理请求,从而避免请求的发送者
和接收者之间的耦合关系。将这些对象连成一条链,并沿着这
条链传递该请求,直到有一个对象处理它为止。
例如,
一个依靠机械装置来对硬币进行分类的银行用一个单独的投币
口管理所有的硬币。当一个硬币被扔进来时,
Chain of Responsibility决定了哪个管道容纳哪种硬币。如果一
个管道不能容纳这个硬币,这个硬币将被传递到下一个管道,
直到它被接受为止。
行为协调:
当客户提交一个请求时,请求沿链传递直至有一个
ConcreteHandler对象负责处理它。
16. Strategy(策略) Pattern
意图:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

例如,传真、夜里到达的邮件、航空邮件、水陆路邮件都是将信件从一个地方传递到另外一个地方,但是使用了不同的传递方式。
18. Interpreter
意图:给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的例子。
例如,音符为表示声音的声调和长度提供一套文法表示方式。当音乐家按照乐谱演奏时,他们就是Interpreters,翻译音符的文法。

你可能感兴趣的:(设计模式)