设计模式分类:
behavioural 行为型, structural 结构型, creational 创建型
behavioural Patterns:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式 -11
structural Patterns: 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式 -7
creational Patterns: 工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式 -5
遵循的六大原则
1、开闭原则:对扩展开放,对修改关闭。需要扩展的时候,不能修改原有代码,所以常用接口和抽象类来实现
2、里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能(不能覆盖父类的非抽象方法)。所以要使用基于抽象类和接口的继承。
3、依赖倒转原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象
4、接口隔离原则:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。可以把接口拆开,用组合搞定
5、迪米特法则:一个对象应该对其他对象保持最少的了解,类应该减少了不必要的依赖,降低耦合关系。当然若过分的使用,会产生大量这样的传递类,增加系统复杂度。
6、单一职责原则:一个类只负责一个功能领域中的相应职责,实现高内聚、低耦合,增加可复用性
开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段,相辅相成,相互补充,目标一致,只是分析问题时所站角度不同而已
概念理解
1.abstractfactory 抽象工厂模式
创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。工厂类实现Provider接口,发布信息类实现Sender接口
2.adpter 适配器模式
将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。用到继承和实现接口
* 类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。public class Adapter extends Source implements Targetable
* 对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法就行。
* 接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类Wrapper,实现所有方法,我们写别的类的时候,继承抽象类即可。
3.bridge 桥接模式
通过对Bridge类的调用,实现了对接口Sourceable的实现类SourceSub1和SourceSub2的调用,将抽象化与实现化解耦。
像JDBC桥DriverManager一样,JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了
4.builder 建造者模式
是抽象工厂模式和最后的Test类结合体,将很多功能集成到一个类里,用来创建具有多个不同的属性的对象
5.chain of responsibility 责任链模式
为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
6.command 命令模式
目的就是达到命令的发出者和执行者之间解耦,实现请求和执行分开。用来解耦invoker和receiver
7.composite 组合模式
8.decorator 装饰模式
9.facade 外观模式
10.factory method 工厂方法模式
普通工厂方法模式:建立一个工厂类,对实现了同一接口的一些类进行实例的创建
多个工厂方法模式:是提供多个工厂方法,分别创建对象
静态工厂方法模式:多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可
11.flyweight 享元模式
12.interpreter 解释器模式
13.iterator 迭代子模式
14.mediator 中介者模式
15.memento 备忘录模式
16.observer 观察者模式
17.prototype 原型模式
实现Cloneable接口,覆写clone方法 ,深复制不仅复制所考虑的对象,而且把要复制的对象所引用的对象都复制了一遍。而浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
18.proxy 代理模式
为其他对象提供一种代理或替身以控制对这个对象的访。动态代理模式通过使用反射,可以在运行期决定加载哪个类,避免了一个类对应一个代理的问题;同时,通过统一的invoke方法,
统一了代理类对原函数的处理过程,使用动态代理很大程度上减少了重复的代码,降低了维护的复杂性和成本。
19.singleton 单例模式
确保一个类只有一个实例,并提供一个访问它的全局访问点!
* 饿汉模式 线程安全 但效率比较低 ,在类加载的时候创建一次实例,不会存在多个线程安全问题
* 懒汉式是延时加载,在被引用的时候才会创建实例,使用volatile、双重校验锁保证线程安全和执行效率
* 静态内部类持有单例对象,则可在引用时再加载实例,以达到懒加载的目
* 在用枚举实现单例时,可以保证三个特性,自由序列化,线程安全,保证单例
牢记单例的三大要点:线程安全、延迟加载、序列化与反序列化安全
20.state 状态模式
21.strategy 策略模式
22.template method 模板方法模式
23.visitor 访问者模式
代码实例,请参考以下文章:
https://blog.csdn.net/tyyking/article/details/52300771