设计模式的汇总



 设计模式总结起来就是那23种,其中分为三类:创建型模式、结构型模式、行为型模式。

创建型模式一般用于创建类:

工厂方法

一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

抽象工厂

当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。

建造者模式

将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

如: 车子分好几个部分:车身、轮子、底座。那么有一个工厂专门造车身、轮子、底座,组装者可以按照工序,先摆好地盘、装上轮子,接着盖上车身,好了车子造好了!!!

单例模式

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

如:我是副校长,学校只有一个正校长,盖章的事只能找他!!!

原型模式

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

如:这个鞋子是定做的,质量很好,我还想要一双,师傅你看你还能帮我照着这个样子在复制一双???

创建型模式稍微简单,下面看看结构型模式

 门面模式

门面模式为了系统提供一个 统一的高层接口供外部客户使用。也是提供一个更高的层次的接口,使得子系统更容易使用

如:导购员

代理模式

对其他对象提供一种代理以控制对这个对象的访问(抽象主题角色、代理主题角色、真实代理对象)。

如:一个快递员的车子坏了,今天的快件送不了,那么另外一个快递员可以代他送今天的快件!

适配器模式

适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

如:原来手机上的2.5接口的耳机坏了,现在市面上只有3.5接口的耳机,怎么办,不可能换个手机吧?老板推荐你买个适配器,ok,可以使用了!

组合模式

      又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

  组合模式让你可以优化处理递归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。关于分级数据结构的一个普遍性的例子是你每次使用电脑时所遇到的:文件系统。文件系统由目录和文件组成。每个目录都可以装内容。目录的内容可以是文件,也可以是目录。按照这种方式,计算机的文件系统就是以递归结构来组织的。如果你想要描述这样的数据结构,那么你可以使用组合模式Composite。

职责模式

也叫装饰模式或油漆工模式

是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);

桥模式

用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化"。这句话有三个关键词,也就是抽象化、实现化和脱耦

享元模式

它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。通常物件中的部分状态是可以分享。

下面看行为模式

模板模式

不用说了,很简单

备忘录模式

在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

角色有:发起人、备忘录、负责人

发起人:创建含有内部状态的备忘录对象,并使用备忘录对象存储状态
负责人:负责人保存备忘录对象,但不检查备忘录对象的内容
备忘录:备忘录对象将发起人对象的内部状态存起来,并保正其内容不被发起人对象之外的对象像读取

观察者模式

又称发布-订阅模式

一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。

如天气预报员发布了天气预报,那么会通知已经订阅了此类服务的群众。

职责链模式

用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯一共同点是在他们之间传递request. 也就是说,来了一个请求,A类先处理,如果没有处理,就传递到B类处理,如果没有处理,就传递到C类处理,就这样象一个链条(chain)一样传递下去。

命令模式

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

如:举一个例子说明一下,玉帝传美猴王上天,玉帝创建了一个命令就是圣旨,然后指出圣旨的接受者美猴王,而太白金星只是传达命令的人。这个过程就是命令模式的应用。
这个好处就是玉帝将不会直接和美猴王打交道,他只需把命令封装在圣旨中交给太白金星传达即可其他的事他就不用问了。

状态模式

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。



 

切换状态,做不同的事

策略模式

定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。



 
中介者模式

又叫调停者模式,用于模块间解耦,通过避免对象互相显式的指向对方从而降低耦合。

三个角色:抽象调停者、具体调停者、同事



 

 如:房东、租户、中介的三者关系


 解释器模式

 简单的语法解释器构架

 

 

访问者模式

表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。

 

 


 

猜你喜欢

转载自wxg6203.iteye.com/blog/1426949