工厂模式
实际上是把一个类的实例化通过一个工厂类来推迟实例化,实例化的过程是通过实现接口来返回一个类型。这样做的弊病是一个类只能返回一种类型,如果重载就会形成命名冲突,所以更常用的是在工厂类里面添加多个静态的实现方法,这样就可以实现各种不同的类型了。
抽象工厂
抽象工厂就是在实现接口里面包含了各种类似的功能,比如两个不同风格的按钮可以有很多相同是属性和方法,这些方法可以抽象到接口里面以便实例化的时候去实现,基于工厂模式。
生成器模式
感觉就像是把一个拥有复杂功能的一个类的实例化通过比较形象的形式一层一层的实例化出来,比如一个食物的实例化需要通过厨师以及服务员来实例化,厨师来实例化食物的各种详细的信息,服务员指定厨师来达到选择不同食物的效果,最后客户买了食物。
原型模式
就是需要创建一个一样的新的实例的时候不创建新的,而是复制以前的,复制比创建更加的高效。、
单例模式
很多时候往往只需要类的一个实例在程序中运行,这个时候就需要单例模式,这个模式把构造函数私有化,仅提供该类的一个getInstance方法来获取实例,这个方法检测是否存在唯一实例,如果存在返回这个实例,不存在就创建一个新的实例返回。在多线程中如果没有加上一个互斥锁可能导致多个实例的出现。
适配器模式
现有的类之间的数据无法交互。需要一个新的类作为中间的媒介,来进行转换,就像电源适配器一样,只需要简单的转换数据达到能适配的目的即可。
桥接模式
对于多维度的变化传统的继承方式会造成大量的继承和复杂的构造,耦合度非常高。桥接模式则是通过抽象,在抽象里面复合另一个纬度的抽象类,以此来一层一层的嵌套来实现多维度的交互。
组合模式
就是树形化的继承结构
装饰模式
传统的方法给一个类添加功能是通过继承来做到的,但是装饰类可以提供比继承更高的灵活性,总的来说就是提供一个decorated类来给各种具体添加功能的装饰类来继承。不过复杂性更高。
外观模式
其实就是把各种子系统的分散的功能聚合起来在一个类中形成一件特定有意义的事情,也就是组合封装起来,这些封装起来的方法能够方便的给另外的资源所使用而不需要去调用多个分散的方法。
享元模式
减少大量物件造成的内存的占用
代理模式
对于复杂的或者无法复制的对象使用一个代理对象对其进行访问,可以结合享元模式以减少内存开销。代理模式的典型是引用计数,当计数为0时释放资源。
责任链模式
一层套一层的模式,有点像链表,对于每层有自己的职责,并且一定会传递到最底层。
命令模式
将行为抽象为对象,比如以前只需要写一个接口里面拥有一个通用的方法,而现在则是把所有方法集合在了一起,也就是这个类本身代表了他的行为
翻译模式
类似于语法分析器,将特定的问题当成一句语句来翻译来解决问题。
迭代器模式
用于返回一个容器的个个元素,类似于遍历。
中介者模式
通过使用一个中间的类来降低两个需要相互之间影响类之间的耦合度。
备忘录模式
不破坏封装的前提下能够几下类的状态并可恢复
观察者模式
当被观察者发生改变时可以提醒观察者,类似于事件响应
策略模式
在不同的状态下面一个类执行有不同的方法,具体来说就是一个不同的类代表一个策略,当这个类作为参数时就代表使用该策略。
由客户端决定,往往一次只能选择一种策略。
状态模式
与策略模式非常相近,但是状态的改变是内部进行的,用户看不到。
模版方法模式
定义好已经固定的东西,抽象出来一下子类要去实现的东西
参观者模式
对于类的每个元素,visitor接口都有一个相应的处理函数,实现好了这些函数之后就可以在后面的操作中完成对于类中每个元素不同的访问效果。