设计模式解读

  今天上课的时候,王老师问我们什么是设计模式?当时我们并没有回答上来,设计模式对于我们了解架构来说很重要,于是就有了这次的作业。

“设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码的可靠性。”这是设计模式上对于设计模式的定义,我们最常用的设计模式一共有23种,根据其目的可以把它们分成创建型、结构型和行为型三种。创建型模式主要用于创建对象,分别有工厂方法模式、抽象工厂模式、建造者模式、原型模式和单例模式。结构型模式主要用于处理类或对象的组合,包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。行为型模式主要是用于描述对类或对象怎样交互和怎样分配职责,包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。

1.工厂方法模式

核心类不再负责方法的创建,而是把具体的创建工作交给子类去做,即核心类只是提供方法的接口,不负责方法的实例化,这使得工厂方法模式可以许可系统在不修改核心类的情况下添加子类就可以引进新的工作。

  2.抽象工厂模式

   这种模式创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类,提供了一个公共的接口,隔离了具体类的生成,使得客户并不需要知道什么被创建,由于这种隔离使得具体类的更换更加的灵活。

  3.建造者模式

        建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。一般有四种类:

产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。
        抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。
       建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。
       导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。

  4.原型模式

   原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。

  5.单例模式

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

    单例模式应该是23种设计模式中最简单的一种模式了。单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例。饿汉式单例在单例类被加载时候,就实例化一个对象交给自己的引用;而懒汉式在调用取得实例方法的时候才会实例化对象。

   6.适配器模式

    适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。

  7.桥接模式

   桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。

  8.装饰模式

   需要扩展一个类的功能,或给一个类增加附加责任需要动态地给一个对象增加功能,这些功能可以再动态地撤销。需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。

  9.代理模式

   其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。

      10.外观模式

外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口。

  11.组合模式

   组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便,将多个对象组合在一起进行操作,常用于表示树形结构中,例如二叉树,数等。

12.享元模式

   享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。

  13.策略模式

   策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数。

  14.模板方法模式

   一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用。

  15.观察者模式

   就是消息订阅--发布模式。本来原始的状况是需要在观察者类内部设置需要通知的对象。结果现在出现了事件。定义委托来通知其他对象,显得更简洁。

16.迭代器模式

   顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。

   17.职责链模式

   就是一个将请求或命令进行转发的流程,类似工作流。并且,也非常类似状态模式,它们共同的特点就是将一个复杂的判断逻辑,转移到各个子类,然后在由子类进行简单判断。

  18.命令模式

   顾名思义,命令模式就是对命令的封装,所谓对命令的封装,说白了,无非就是把一系列的操作写到一个方法中,然后供客户端调用就行了。

  19.备忘录模式

   主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态,类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作。

  20.状态模式

   一个方法的判断逻辑太长,就不容易修改。方法过长,其本质就是,就是本类在不同条件下的状态转移。状态模式,就是将这些判断分开到各个能表示当前状态的独立类中。核心思想就是:当对象的状态改变时,同时改变其行为,很好理解!就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态,所以,状态模式就两点:1、可以通过改变状态来获得不同的行为。2、你的好友能同时看到你的变化。

  21.访问者模式

   访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果。在不改变原有代码的结构上,又想去影响原来的类,或是访问原来类的成员,此时就可以使用访问者模式。但需要注意的是:事先需要构造好那些要访问的对象的对象结构。这个结构在访问者类中去维护。

  22.中介者模式

   中介者类唯一要干的事情就是给各个成员对象发出通知。因此,中介者事先就应该知道有哪些成员。是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和抽象中介类的关系,具体类类之间的关系及调度交给抽象中介类就行,这有点像spring容器的作用。

  23.解释器模式

   描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子以及如何解释这些句子。比如写好了C#代码,VB代码,此时需要个编译器来编译。这时,这个编译器就相当于解释器,解释好了交给CPU执行就好了。

时间: 2024-10-13 12:17:32

设计模式解读的相关文章

IOS 单例设计模式解读

IOS 中单例设计模式的解读与用法 一.单例的作用 顾名思义,单例,即是在整个项目中,这个类的对象只能被初始化一次.它的这种特性,可以广泛应用于某些需要全局共享的资源中,比如管理类,引擎类,也可以通过单例来实现传值.UIApplication.NSUserDefaults等都是IOS中的系统单例. 二.单例的写法 单例的写法常用的有两种方式: 方式1.不考虑线程 static SingleCase *manager = nil;       + (SingleCase *)defaultMana

设计模式解读之一: 策略模式

1. 模式定义 把会变化的内容取出并封装起来,以便以后可以轻易地改动或扩充部分,而不影响不需要变化的其他部分: 2. 问题缘起当涉及至代码维护时,为了复用目的而使用继承,结局并不完美.对父类的修改,会影响到子类型.在超类中增加的方法,会导致子类型有该方法,甚至连那些不该具备该方法的子类型也无法免除.示例,一个鸭子类型: public abstract class Duck {    //所有的鸭子均会叫以及游泳,所以父类中处理这部分代码    public void quack() {     

(转)组合优于继承---设计模式之策略模式

文章来源:http://www.javaeye.com/topic/328262 当我们掌握了Java的语法,当我们了解了面向对象的封装.继承.多态等特性,当我们可以用Swing.Servlet.JSP技术构建桌面以及Web应用,不意味着我们可以写出面向对象的程序,不意味着我们可以很好的实现代码复用,弹性维护,不意味着我们可以实现在维护.扩展基础上的代码复用.一把刀,可以使你制敌于无形而于江湖扬名,也可以只是一把利刃而使你切菜平静.Java,就是这把刀,它的威力取决于你使用的方式.当我们陷入无尽

【转】Mybatis源码解读-设计模式总结

原文:http://www.crazyant.net/2022.html?jqbmtw=b90da1&gsjulo=kpzaa1 虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式. Mybatis至少遇到了以下的设计模式的使用: Builder模式,例如SqlSessionFactoryBuilder.XMLConfigBuilder.XMLMapperBuilder

Mybatis源码解读-9种设计模式总结

虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式.Mybatis至少遇到了以下的设计模式的使用: Builder模式,例如SqlSessionFactoryBuilder.XMLConfigBuilder.XMLMapperBuilder.XMLStatementBuilder.CacheBuilder:工厂模式,例如SqlSessionFactory.ObjectF

解读设计模式

技术是死的,功能是活的.如何实现一个功能有很多种方式,如何快速灵活高效的实现这些功能就是一门艺术了.这其中可能会组合式的用到设计模式,这就是架构.一.创建型模式 1.工厂方法模式:使用继承,动态实例化不同的对象执行相同的方法. 2.抽象工厂模式: 3.单例模式: 4.建造者模式: 5.原型模式:二.结构型模式 6.适配器模式: 7.装饰器模式:使用依赖倒置原则,在对象的方法上又封装一层. 8.代理模式: 9.代理模式: 10.外观模式: 11.桥接模式: 12.组合模式: 13.亨元模式:三.行

设计模式新解读

网上有一哥们把设计模式解释的很有趣,就摘录到下面,但找不到原作者了,所以没加原地址还请见谅哈! 创建型模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了.麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开.消费者任何时候需要某种产品,只需向工厂请求即可.消费者无须修改就可以接纳新产品.缺点是当产品修改时,工厂类也要做相应的修改.如:如何创建及如何向

设计模式实例剖析与深入解读视频教程

├─创建型模式│  ├─单例模式.pptx│  ├─原型模式.pptx% a, F7 |: k+ T" U, m0 m4 `│  ├─工厂方法模式.pptx; b% }2 }, G; W8 n" W" S│  ├─建造者模式.pptx│  ├─抽象工厂模式.pptx│  ├─简单工厂模式.pptx0 c& V" |* ?0 [# Q, y- @- q│  ├─设计模式与UML之创建型模式(第一讲 建造者模式).exe9 L8 Z$ ~4 V& l;

设计模式之6大设计原则全新解读

一.“单一职责”原则(Single Respnsibility Principle) SRP 单一职责原则的定义是:应该有且仅有一个原因引起类的变更. 单一职责原则的好处: 1.类的复杂性降低,实现什么职责都有清晰的定义: 2.可读性提高,复杂性降低,那当然可读性就提高了: 3.可维护性提高,可读性提高,那当然更容易维护了: 4.变更引起的风险降低,变更是必不可少的,如果一个接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性.维护性都有非常大的帮助.