23种设计模式

  在上学期我们学到了23种设计模式,现在重新复习一下。

  设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。为了更好地分类学习,我们将设计模式分为三种:结构型模式,包括单例模式、抽象工厂模式、建造者模式、工厂方法模式、原型模式;结构型模式,包括适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式;行为型模式,包括模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。

  接下来我们对不同的设计模式进行简要地复习。

  1.单例模式

  单例模式是设计模式中最简单的形式之一,它的核心结构中只包含一个被称为单例的特殊类,通过单例模式可以保证系统中一个类只有一个实例。这一模式的目的是使得类的一个对象成为系统中的唯一实例。举个例子就是windows的任务管理器,一台电脑只能打开一个任务管理器。在XXX系统中,一个单号只能唯一确定一次填报记录。

  2.抽象工厂模式

  在抽象工厂中,每一个具体工厂能生产多个具体产品,抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象。而且使用抽象工厂模式还要满足两个条件:1.系统中有多个产品族,而系统一次只可能消费其中一族产品。2.同属于同一个产品族的产品以其使用。

  3.建造者模式

  建造者模式是最复杂的创建型模式,他用于创建一个包含多个组成部分的复杂对象,可以返回一个完整的产品对象给用户。建造者模式关注改复杂对象是如何一步一步创建而成的,对于用户而言,无需知道创建过程和内部组成细节,只需直接使用创建好的完整对象即可。

  4.工厂方法模式

  简单工厂模式增加具体的产品类会违反开闭原则,因此引入了工厂方法模式。定义一个抽象工厂类,再定义具体的工来生成具体的产品。

  5.原型模式

  在软件系统中,如果需要多次创建某一类型的对象,可以治创建一个该类型的对象,通过克隆的方式来复制出多个相同的对象并简化该过程。

  6.适配器模式

  适配器模式是为了使原本不能兼容的事物能够协同工作,将一个类的借口转化为用户希望的另一个接口,而无需修改现有事物的内部接口。最经典的例子就是适配器,通过适配器可以实现给限定电压的笔记本,手机充电。

  7.桥接模式

  当事物存在两个独立变化的维度时,将两个变化因素抽取出来形成高层次的关联关系,使原本复杂的类继承结构变得相对简单,极大减少系统中类的个数,将抽象部分与实现部分分离,使他们可以独立地变化。

  8.装饰模式

  不使用继承而通过关联关系来调用现有类中的方法,达到复用的目的,并使得对象的行为可以灵活变化,动态的给一个对象增加一些额外的职责,比生成子类的方式更为灵活。

  9.组合模式

  通过面向对象技术来实现对系统中存在的容器对象和叶子对象进行统一操作,且客户端无需知道操作对象是容器还是其成员。将对象组合表示为部分整体的层次结构,是的客户对单个对象和复合对象的使用具有一致性。

  10.外观模式

  为复杂的子系统提供一个统一的入口,简化客户端对多个子系统的访问,就比如网站的首页,记住首页就可以,而无需知道每一个页面的具体网址。

  11.享元模式

  通过共享技术术实现对象的重用,大量节约系统的内存,给模式关心系统的性能与资源的利用情况,运用共享技术能有效地支持大粒度的对象。

  12.代理模式

  当不能直接访问一个对象时,通过一个代理对象间接访问他,为其他对象提供一个代理以控制对这个对象的访问。

  13.模板方法模式

  在父类中提供一个方法定义一个操作序列,而将具体操作的实现放在子类中。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

  14.命令模式

  将请求的发送者与请求的接收者分离,通过抽象编程的方式,使得相同的请求发送者可以做用于不同的请求接收者。讲一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。

  15.迭代器模式

  通过一个专门的对象来对聚合对象进行遍历,而不需要直接操作聚合对象。提供一种方法顺序访问一个聚合对象中的各个元素,而又不需暴漏该对象的内部表示。

  16.观察者模式

  一个对象的行为将影响到一个或多个其它对象的行为。定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。在XXX系统中,改变注册用户资料会引起报表中用户资料的改变。

  17.中介者模式

  引入一个中间对象,使系统中元有对象两两之间的复杂关系简化为中间对象的交互,将一个网状结构重构为一个星形结构。用一个中介对象来封装一系列对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。

  18.备忘录模式

  提供一个可以后悔的机制,使得对象可以恢复到某一历史状态。在不破坏封装性的前提下,,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。

  19.解释器模式

  自定义一个新的编程语言,改语言有一套自己的语法规范,,如关键字和运算符等。定义语言的文法,并且建立一个解释起来解释改语言中的句子。

  20.状态模式

  对象状态不同时其行为也不相同,切对象的状态可以发生转换。允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎是修改了它的类。

  21.策略模式

  实现某种功能存在多种方式,在不修改现有系统的基础上可以灵活选择或更换实现方式,也可以使用新的实现方式。定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。策略模式使得算法的相互变化可独立于使用它的用户。

  22.职责链模式

  将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,不能则传给链上的下一个对象。比如请假的时候,一节课的假可以和任课老师请,两三天的假就需要和导员请,再长的假需要和校长请。

  23.访问者模式

  存在多种类型的对象可以直接访问某个聚合结构中不同类型的元素对象,不同类型的对象对于不同元素对象可以使用不同的访问方法。表示一个作用于某对象结构中的各元素的操作。使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

原文地址:https://www.cnblogs.com/my1204/p/6670967.html