11种常见的高等面向对象应用开发的设计模式(总共23种)

一,创建型模式

1,Singleton(单件)-对象创建型模式
     保证一个类有且仅有一个实例,并提供一个访问它的全局访问点。对一些类来说,只有一个实例是很重要的,而且特别是当客户只能通过一个众所周知的访问点访问它。可以定义一个Instance操作,允许客户访问它的唯一实例(static静态成员),客户只能通过Singleton的Instance操作访问Singleton的这个唯一实例。单件类可以有子类。一定要保证该类只有一个唯一的实例。实现:设有一个私有的静态同类型数据成员,保证只有一个静态实例,提供Instance方法访问该实例。

2,Abstract Factory(抽象工厂)-对象创建型模式
     指定一个可以创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。需要声明一个创建抽象产品对象的操作接口(抽象工厂类),需要有一个或多个实现创建具体产品对象的操作(具体工厂类),需要声明一类产品对象的接口(抽象产品类),需要定义一个或多个将被相应的具体工厂创建的产品对象,来实现抽象产品类的接口。客户仅仅使用抽象工厂和抽象对象这两个类声明的接口。

3,Prototype(原型)-对象创建型模式
     用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Prototype类声明一个克隆自身的接口,ConcretePrototype类实现一个克隆自身的动作,即一个Clone操作。用户通过让一个原型克隆自身从而创建一个新的对象。

二,结构型模式
1,Bridge(桥接)-对象结构型模式
     将抽象部分与它的实现部分分离,使它们都可以独立地变化。定义抽象类(Abstraction)的接口,维护一个指向实现类(Implementor)对象的指针。定义实现类(Implementor)的接口,该接口不一定要与抽象类(Abstraction)的接口完全一致,再定义一个类(ConcreteImplementor)实现实现类(Implementor)接口并定义它的具体实现。如果不希望抽象和它的实现部分之间有一个固定的绑定关系,在程序运行时实现部分可以被选择和切换,可以使用桥接模式。有时希望多个对象间共享实现,可以通过使用桥接模式,使用引用计数。

2,Adapter(适配器)-类对象结构型模式
     将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。即修改已经存在的接口。Target类定义客户使用的与特定领域相关的接口。客户与符合Target接口的对象协同。Adaptee定义一个已经存在的接口,这个接口需要适配。Adapter对Adaptee的接口与Target接口进行适配。类适配器使用多重继承对一个接口与另一个接口进行匹配。对象适配器依赖于对象组合。

3,Proxy(代理)-对象结构型模式
     为其他对象提供一种代理以控制对这个对象的访问。对于每一个开销很大的对象,应该根据需要进行创建。Proxy类可以代替原先存在的一个创建时开销较大的类,并且在需要时负责实例化这个类的对象。

4,Composite(组合)-对象结构型模式
     将对象组合成树形结构以表示“部分-整体”的层次结构。Componentl类使得用户对单个对象和组合对象的使用具有一致性。Component类为组合中的对象声明接口,实现所有类共有接口的缺省行为,声明一个接口用于访问和管理Component的子组件。Composite类定义有子部件的那些部件的行为,存储其他Composite或Leaf。Leaf类在组合中表示叶节点对象,没有子部件。

三,行为型模式

1,Template Method(模板方法)-类行为型模式
     定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。实现:使用抽象类,定义抽象的原语操作(primitive operation),具体的子类将重定义原语操作以实现一个算法的各个具体步骤。基类(抽象类)在模板方法一次性实现一个算法的不变的部分(公共行为),并将可变的行为留给子类来实现(继承父类并重定义模板方法)。模板方法不应该被声明为virtual,所有被模板方法使用到的操作都要声明为virtual和private或protected,这样客户就不能直接调用它们。

2,State(状态)-对象行为型模式
     允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。即修改自身的类。状态模式描述了一个具有多种状态的类如何在每一种状态下表现出不同的行为。一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。

3,Visitor(访问者)-对象行为型模式
     表示一个作用于某对象结构中的各元素的操作。它是你可以在不改变各元素的类和避免动态绑定的前提下定义作用于这些元素的新操作。Visitor访问者类为该对象结构中ConcreteVisitor的每一个类声明一个Visit操作,以一个具体元素类为参数。ConcreteVisitor具体访问者类实现了每个由Visitor声明的操作。Element元素类定义一个Accept操作,它以一个访问者为参数。ConcreteElement具体元素类实现Accpet操作。

4,Iterator(迭代器)-对象行为型模式
     提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。Iterator迭代器类定义访问和遍历元素的接口。ConcreteIterator具体迭代器类实现迭代器接口,对该聚合遍历时跟踪当前位置。Aggregate聚合类定义创建相应迭代器对象的接口。ConcreteAggregate具体聚合类实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例。
 


 2016_08_17更新:附上一篇详细全面的23种设计模式的讲解,传送门:http://www.cnblogs.com/beijiguangyong/archive/2010/11/15/2302807.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霍姆格雷特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值