23中设计模式的理解

一般做软件开发都需要知道23种设计模式
这面这张图概括的很好
23中设计模式的理解_第1张图片

创建型模式有5种:

单例模式,全局只实例化一个对象。spring里面自动注入的bean默认是单例的。同步容器比如concurrentHashMap的put等方法,使用的是unsafe类的一个对象,unsafe类就符合单例模式。
工厂方法模式:一个工厂提供返回类的实例的方法,使用这个工厂,可以自己决定要实例化哪个类。Executors类专门生产一些线程池。一个具体工厂生产一种产品。

抽象工厂模式:一个抽象工厂可以有很多的具体实现工厂,还要有一个生产工厂的类,生产出不同的具体工厂,具体工厂可以生产不同的实例。
建造者模式:创建一个builder构造类,一步步使用简单的对象来构造一个复杂的对象。比如生成一顿饭,构造一种食物添加到饭对象里,构造一种饮料添加到饭这个对象。
原型模式,通过复制(clone)原有的对象创建新的对象。

结构型模式有7种:

适配器模式:一个适配器,针对不同的参数调用不同的类的接口,比如一个多媒体播放器,有很多的具体实现类,如果传入vlc文件,就会调用vlc播放器,如果传入MP4,就会调用mp4播放器。
桥接模式:通过桥接接口,把抽象和实现分离开,桥接接口的不同实现类,调用同样的抽象方法,是独立变化的。
过滤器模式:创建一个接口,定义一种过滤方法,如果实现这种过滤方法,就可以对某个类的不同实例进行过滤。
组合模式:相似的一组对象,可以看作单个对象,对这个对象定义行为,单个对象和组合对象都具有这些行为。比如老板可以维护一个list,里面可以装干部,干部也可以维护一个list,里面可以装普通员工。不管是老板还是干部,他们都能使用维护list的方法。
装饰模式:用抽象接口和抽象类在原有的基础上添加细小的功能,不需要继承其他类。
外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。
代理对象:通过一个代理类实现对某个类的访问,而不是直接访问。
享元模式:减少创建对象的数量。属于一定参数,创建一个对象,如果针对该参数的对象已经存在了,就不会创建新的对象。

行为型模式有11种:

命令模式:一个接口,比如定义一个execute方法,实现这个接口的类,可以通过execute执行某种命令。
解释器模式:定义一些解释规则,使用解释器按照规则,解释执行语句。
访问者模式:操作方法可以随着访问者的不同而改变。在元素类型不变,但是需要经常定义新行为的场景。需要操作的类都需要接受访问者,一个访问者接口定义了针对不同操作对象的不同实现方法,一个实现类实现了这些方法。当需要添加新的行为的时候,只需要在访问者接口添加新的方法并实现即可,无需改变原有的类。
观察者模式:一个对象、多个观察者的情况,当对象的属性改变后,会通知观察者进行属性的更新。
模板模式:经常使用的,变化不大的一套步骤封装成一个模板,(宏操作、脚本录制等)
策略模式:提供了访问系统的多种方法,称为策略。由客户端在某种场景下,选择某种策略。比如说 ConcurrentHashMap提供了三种写入方式,add、offer、put,如果添加不成功,直接报异常可以使用add;如果需要判断添加是否成功的返回值,可以使用offer,如果添加不成功,要使线程阻塞的话,可以使用put方法。取决于使用者的选择。

状态模式:考虑什么样的状态对应什么样的行为。比如说,一个线程本来是阻塞的,后来跳出中断,由参数来判断该线程是cancel引起的中断还是由signal引起的中断,cancel引起的中断,需要线程自我中断,而signal引起的中断需要先去申请锁,申请不到锁再去中断。
备忘录模式:保存对象的历史状态。(git里面就会保存对象的历史状态,每一次提交的版本有哪些变化,都有记录)
中介者模式:一个中介类,用来实现对象之间的通信。
迭代器模式:比如说不用关心容器中对象的迭代方式,只需要关心对对象的操作方法就可以。比如Iterator以及简化的for循环。
责任链模式击鼓传花的模式,多个对象都可以接收请求,形成一条链,如果没有对象处理这个请求,就会沿着链传送,直到有对象处理这种请求。对象组成一条链,发送者将请求发给链的第一个接收者,请求可以沿着链传递。比如异常处理的时候,可以自己try catch,也可以throw异常,让外层的程序捕获并处理,可以一直往外抛到最外层。

你可能感兴趣的:(JAVA,设计模式,java)