设计模式
代码可见:https://gitee.com/wen-haozhe/design-model
创建型
单例模式
1.构造方法私有
2.在这个类中只创建一个静态变量
作用:保证全局只有这一个变量,只有此类可以提供全局的一个访问接口
使用场景:全局唯一序列号,IO和数据库连接不想轻易的被销毁
饿汉式
变量在定义时直接被创建
点击查看代码
package Test;
public class Hungry {
private Hungry(){
System.out.println(Thread.currentThread().getName());
}
private static Hungry hungry = new Hungry();
public static Hungry getInstance(){
return hungry;
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(() -> {
Hungry.getInstance();
}).start();
}
}
}
缺点:耗内存,有时没用到这个对象
懒汉式
对象在被调用方法时被创建,需要加锁
点击查看代码
package Test;
public class LazyMan {
private LazyMan(){
System.out.println(Thread.currentThread().getName());
}
private static LazyMan lazyMan;
public static LazyMan getInstance(){
synchronized (LazyMan.class){
if(lazyMan == null){
lazyMan = new LazyMan();
}
}
return lazyMan;
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(() -> {
LazyMan.getInstance();
}).start();
}
}
}
工厂模式
作用:当用户想要某个类的实例的时候,他不需要关心这个类的具体的创建的细节,只需要传递相关的参数,在工厂中通过这些参数获取类对象,对用户屏蔽创建的细节,方便操作
使用场景:用户通过车的名字去拿车,而不需要管车是怎么造的
静态工厂模式(简单工厂模式)
工厂类帮你创建对象,你只用向工厂类中传参数
例如用户去买车,用户不需要知道车的构造函数,让工厂去通过参数构造车,屏蔽底层细节实现
工厂方法模式
静态工厂模式不符合开闭原则(扩展开放,修改关闭),因为你添加新车需要修改Factory类的代码
工厂方法模式继承工厂接口,新车实现工厂接口,用户调不同的工厂接口(对于用户更麻烦,因为针对不同工厂)
简单工厂模式比较简单,虽然设计原则上倾向工厂方法模式,但很多时候还是用简单工厂模式
抽象工厂模式
工厂的工厂,可以添加某个产品簇。工厂的里面也是抽象的工厂接口。
作用:解决一个产品簇中有多个产品,而用户只消费其中一个产品。
例如:我一个产品簇中有手机,路由器,抽象工厂先定义获取这两个东西的抽象方法,然后再用具体的工厂实现这两个抽象方法
抽象工厂:获得手机,获得路由器
产品接口:手机,路由器
小米实现两个产品接口,然后在抽象工厂中返回这两个自己的工厂产品
华为同理
建造者模式
作用:你一个对象可能有多种构建方法,例如一种套餐,有多种不同的组合
将构建与表示分离

首先创建抽象的构建者,ConcreteBuilder是构建者的具体实现,这里面会获得产品。Director中通过获取不同的Builder获取不同的表示。
原型模式
继承cloneable方法,实现其中的clone方法后完成对象的复制
使用场景:一个系统独立于他产品的创建,构成和表示
结构型模式:
适配器模式
在扩展一个类的接口(使你的一个接口可以匹配更多的类)
例如我有个mp3播放器:play(String judge),此时judge只能匹配“mp3”,我如果想要匹配“mp4”,我可以在这个类中添加mp4的类,然后在play函数中去添加mp4的判断,调用mp4的play方法
代理模式
将控制和业务分离,可以通过代理类去给被代理类添加控制
装饰器模式
在不改动原有类代码的基础上添加新功能,通过实现装饰类,将原有类的对象传进去,再调用其方法
组合模式
想要创建树形结构或者目录型结构使用,通过在类中添加列表的方式,当对象间有上下级的关系就记录在列表中
外观模式/门面模式
将多个服务的多个接口用一个门面包装起来,这样别人只用调用这个门面类就可以了
行为型:
策略模式
通过一种接口的不同实现,来选择不同的调用策略
访问者模式
一个类中的变量太多,提供一个访问者类,通过访问者类的限制去访问类中特定的元素
观察者模式
对于一个类有多个观察者,当类中的信息发生改变的时候,观察者会察觉到改变并做出变化
模板模式
定义一个模板,一些子类去继承这个模板,然后创建模板类去调用具体方法
迭代器模式
创建一种可以遍历集合中元素的方法,而不用暴露元素的具体信息
中介模式
消息队列,处理不同对象之间的通信,使对象与对象之间低耦合
责任链模式
一些类共同继承某个父类,然后通过链串起来,程序的执行会依照这个链往下走,实现服务与服务之间的配合。
备忘录模式
类中有一个备忘录列表,每个备忘录都有一个id,ctrl+z的实现,快照机制

浙公网安备 33010602011771号