设计模式总共分为三类:创建型模式、结构型模式和行为型模式。创建型模式分为五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式;结构型模式分为七种:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式;行为型模式分为十一种:策略模式、模板方法模式、观察者模式、迭代器模式、职责链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
【工厂方法模式】
在简单工厂模式中类的创建依赖工厂类,也就是拓展程序的时候,必须对工厂类进行修改,这违背了开闭原则,所以工厂方法模式就创建一个工厂接口,然后可以创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂实现类就可以了,而不需要修改工厂接口。
【抽象工厂模式】
在我看来,抽象工厂模式就是对工厂方法模式的一个改进,一个抽象工厂类可以派生出多个具体工厂类,它还有多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。每个具体工厂类可以创建多个具体产品类的实例,也就是创建的是一个产品线下的多个产品。这样方便修改产品类而工厂方法不行。
【单例模式】
单例对象能保证一个对象只有一个实例,符合单一职责原则,也就是说每个类只实现单一的职责。这样能够便于修改,防止系统混乱。
【建造者模式】
就是创建一个建造者类,可以通过这个类,创建有相同属性,但是属性具体的值是不相同的实例。
【原型模式】
该模式的思想就是将一个对象作为原型,对其进行复制复制、克隆,产生一个和原对象类似的新对象。浅克隆:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的;深克隆:将一个对象复制后,不论是基本数据类型还是引用类型,都是重新创建的。
【适配器模式】
该模式是将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性的问题。
【装饰模式】
就是动态地给一个对象增加一些新的功能,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,是可以动态增加和撤销的,比继承好。
【代理模式】
顾名思义,代理模式就是多创建一个代理类,能够替原来的对象进行一些操作。如果我们修改了原来的方法来适应实现,就违反了开闭原则,使用代理类调用原有的方法,且对产生的结果进行控制,可以将功能划分得更为清晰。
【外观模式】
该模式是为了解决类和类之间的依赖关系,它将类之间的关系放在Façade类中,降低了类和类之间的耦合度,是迪米特法则的典型模式。
【桥接模式】
该模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,是两者可以独立变化。
【组合模式】
组合模式又叫整体-部分模式,在处理树形结构的问题比较方便,是用聚合关系代替了继承关系。
【享元模式】
它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享的。
【策略模式】
该模式定义了一系列的算法,并将每个算法封装起来,使他们可以相互替换,且算法变化不会影响到使用算法的客户。策略模式的决定权在用户,而系统是提供不同的算法,用户只需要决定用什么算法就可以了。
【模板方法模式】
就是指,一个抽象类中,有一个主方法,再定义1..n个方法,可以是抽象的也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用。
【观察者模式】
就是当一个对象发生变化时,其他依赖该对象的对象都会收到通知,并且随着一起变化。
【迭代器模式】
该模式就是按照顺序访问聚集中的对象,是非常常见也是非常重要的模式。它包含两层意思:一是需要遍历的对象,即集合;二是迭代器对象,用于对聚集对象进行遍历访问。其中我可以举一个最常见易懂的例子就是我们的电视节目。频道是聚集类,而我们手上的遥控器就是迭代器。
【职责链模式】
有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求就可以在这条链上传递,直到某一对象可以处理该请求。但是请求的发出者并不清除到底最终哪个对象会处理该请求。
【命令模式】
举个例子,司令员让士兵去干一件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令通过传递,传到士兵处,然后士兵去执行。在这个过程中,三者相互解耦,任何一方都不用依赖其他一方,只需要做好自己的事情就好了。
【备忘录模式】
主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,也就是备份。
【状态模式】
就是当对象的状态改变的时候,同时改变其行为。就拿信用卡用户来说,不用的贷款金额会显示不同的状态,而在不同的状态下,用户能执行的操作是不一样的。
【访问者模式】
就是一种分离对象数据结构和行为的方法,通过这种分离,可达到一个被访问者动态添加新的操作而无需做其他的修改的效果。
【中介者模式】
该模式用来降低类和类之间的耦合,将对象之间的交互进行封装,从而可以独立改变他们之间的交互。
【解释器模式】
是通过一个解释器类,去解释另外一个类的行为。