今天上课的时候,王老师问咱们什么是设计模式?当时咱们并无回答上来,设计模式对于咱们了解架构来讲很重要,因而就有了此次的做业。算法
“设计模式是一套被反复使用、多数人知晓的、通过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码的可靠性。”这是设计模式上对于设计模式的定义,咱们最经常使用的设计模式一共有23种,根据其目的能够把它们分红建立型、结构型和行为型三种。建立型模式主要用于建立对象,分别有工厂方法模式、抽象工厂模式、建造者模式、原型模式和单例模式。结构型模式主要用于处理类或对象的组合,包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。行为型模式主要是用于描述对类或对象怎样交互和怎样分配职责,包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。spring
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来讲,有几种状态,在线、隐身、忙碌等,每一个状态对应不一样的操做,并且你的好友也能看到你的状态,因此,状态模式就两点:一、能够经过改变状态来得到不一样的行为。二、你的好友能同时看到你的变化。
21.访问者模式
访问者模式就是一种分离对象数据结构与行为的方法,经过这种分离,可达到为一个被访问者动态添加新的操做而无需作其它的修改的效果。在不改变原有代码的结构上,又想去影响原来的类,或是访问原来类的成员,此时就可使用访问者模式。但须要注意的是:事先须要构造好那些要访问的对象的对象结构。这个结构在访问者类中去维护。
22.中介者模式
中介者类惟一要干的事情就是给各个成员对象发出通知。所以,中介者事先就应该知道有哪些成员。是用来下降类类之间的耦合的,由于若是类类之间有依赖关系的话,不利于功能的拓展和维护,由于只要修改一个对象,其它关联的对象都得进行修改。若是使用中介者模式,只需关心和抽象中介类的关系,具体类类之间的关系及调度交给抽象中介类就行,这有点像spring容器的做用。
23.解释器模式
描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子以及如何解释这些句子。好比写好了C#代码,VB代码,此时须要个编译器来编译。这时,这个编译器就至关于解释器,解释好了交给CPU执行就行了。