GOF23设计模式

创建型模式
一、单例模式—饿汉式和懒汉式
1.核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。
2.应用场景:Windows中的任务管理器;数据库连接池;项目中的配置文件类等等。
3.优点:减少了系统性能开销。
4.五种单例模式:
        ①饿汉式(线程安全,调用效率高。但是,不能延时加载)
         GOF23设计模式_第1张图片
        类初始化时立即加载,类初始化时,处于天然的线程安全模式,因此线程安全,方法没有同步,效率高。
       
        ②懒汉式(单例对象延迟加载)
         GOF23设计模式_第2张图片
        真正用的时候才加载,资源利用率高了,但每次调用getInstance()方法都要同步,并发效率低。

        ③双重检测锁

        GOF23设计模式_第3张图片
        将同步内容放到if内部,提高了执行效率,不必每次获取对象都进行同步,第一次创建之后就不需要在外等待了。
        看起来不错,但是由于编译器优化原因和JVM底层内部模型原因,偶尔会出问题,不建议使用。
        
        ④  静态内部类实现方式(也是懒加载)
         GOF23设计模式_第4张图片
         外部类没有static属性,则不会像饿汉式那样立即加载对象,只有真正调用getInstance(),才会加载静态内部类。加载            类时是线程安全的,兼并了并发高效调用和延迟加载的优势。

        ⑤使用枚举实现单例
         GOF23设计模式_第5张图片
        GOF23设计模式_第6张图片
        实现较简单,枚举本身就是单例模式。由JVM从根本上提供保障!避免通过反射和反序列化的漏洞。
        缺点是无延迟加载。

二、工厂模式
1.概念:实现了创建者和调用者的分离,由工厂去new。

2.三种模式
        ①简单工厂模式(用来生产同一等级结构中的任意产品,对于增加新的产品,需要修改已有代码)
       
          GOF23设计模式_第7张图片
        不用工厂,调用者要知道非常多,不仅要知道接口Car还要知道实现类。
         GOF23设计模式_第8张图片
        简单工厂类
         GOF23设计模式_第9张图片                       GOF23设计模式_第10张图片
        GOF23设计模式_第11张图片
        仅需要知道接口,和从哪拿到产品
        但违反了开闭原则(增加新的产品要修改代码)
        
        ②工厂方法模式(用来生产同一等级结构中的固定产品,支持增加任意产品)
        创建工厂接口
        
        创建具体工厂
         GOF23设计模式_第12张图片
         GOF23设计模式_第13张图片
        符合开闭原则,但增加了很多类

        ③抽象工厂模式(用来生产不同产品族的全部产品,针对增加新的产品,无能为力,支持增加产品族)
         GOF23设计模式_第14张图片
         GOF23设计模式_第15张图片
        
         GOF23设计模式_第16张图片

三、建造者模式
1.概念

            GOF23设计模式_第17张图片

2.例子
          GOF23设计模式_第18张图片

四、原型模式
1.概念:

GOF23设计模式_第19张图片
2.实现

GOF23设计模式_第20张图片

浅复制,Date实际上是同一个
GOF23设计模式_第21张图片

深复制
GOF23设计模式_第22张图片


也可以通过序列化和反序列化实现深复制
GOF23设计模式_第23张图片
GOF23设计模式_第24张图片


结构型模式

GOF23设计模式_第25张图片

一、适配器模式
1.概念

GOF23设计模式_第26张图片

2.例子
GOF23设计模式_第27张图片
GOF23设计模式_第28张图片
GOF23设计模式_第29张图片

组合适配器
GOF23设计模式_第30张图片

GOF23设计模式_第31张图片
3.应用

GOF23设计模式_第32张图片

二、代理模式
1.概念:

GOF23设计模式_第33张图片
GOF23设计模式_第34张图片

2.应用场景和分类

GOF23设计模式_第35张图片

3.静态代理
GOF23设计模式_第36张图片

4动态代理

GOF23设计模式_第37张图片

处理类

GOF23设计模式_第38张图片
GOF23设计模式_第39张图片

生成代理
GOF23设计模式_第40张图片


原理

GOF23设计模式_第41张图片

三、桥接模式
两个维度,分开来继承,一个持有另外一个。

1.场景及问题

GOF23设计模式_第42张图片
GOF23设计模式_第43张图片

2.桥接模式
GOF23设计模式_第44张图片

四、组合模式

1.场景及核心

GOF23设计模式_第45张图片


2.实现例子
GOF23设计模式_第46张图片
GOF23设计模式_第47张图片
GOF23设计模式_第48张图片
调用

GOF23设计模式_第49张图片

五、装饰模式
1.概念

GOF23设计模式_第50张图片

2.实现细节

GOF23设计模式_第51张图片

GOF23设计模式_第52张图片
GOF23设计模式_第53张图片
GOF23设计模式_第54张图片
调用

GOF23设计模式_第55张图片

3.总结

GOF23设计模式_第56张图片

六、外观模式
1.迪米特法则

GOF23设计模式_第57张图片
2.核心

GOF23设计模式_第58张图片
3.例子

GOF23设计模式_第59张图片

七、享元模式
1.场景和核心

GOF23设计模式_第60张图片
2.例子

GOF23设计模式_第61张图片
3.实现

GOF23设计模式_第62张图片
GOF23设计模式_第63张图片

外部状态
GOF23设计模式_第64张图片
享元类

GOF23设计模式_第65张图片
GOF23设计模式_第66张图片

享元工厂

GOF23设计模式_第67张图片
调用

GOF23设计模式_第68张图片
GOF23设计模式_第69张图片

4.优缺点

GOF23设计模式_第70张图片

                                                                                                                 行为型模式
一、责任链模式
1.定义及场景
GOF23设计模式_第71张图片

2.例子
GOF23设计模式_第72张图片

GOF23设计模式_第73张图片

二、迭代器模式
1.场景
GOF23设计模式_第74张图片

2。结构
GOF23设计模式_第75张图片
一般是作为内部类实现的。

三、中介者模式
1.场景及核心

GOF23设计模式_第76张图片
GOF23设计模式_第77张图片
2.例子

GOF23设计模式_第78张图片

四、命令模式
1.介绍

GOF23设计模式_第79张图片
2.结构

GOF23设计模式_第80张图片
GOF23设计模式_第81张图片

五、解释器模式
1.介绍
GOF23设计模式_第82张图片

六、访问者模式
1.简单介绍

GOF23设计模式_第83张图片

七、策略模式
1.场景

GOF23设计模式_第84张图片
GOF23设计模式_第85张图片

八、模板方法模式
1.场景

GOF23设计模式_第86张图片
GOF23设计模式_第87张图片

GOF23设计模式_第88张图片
2.实现

GOF23设计模式_第89张图片

九、状态模式

1.场景
GOF23设计模式_第90张图片
GOF23设计模式_第91张图片
2.实现

GOF23设计模式_第92张图片

十、观察者模式
1.场景

GOF23设计模式_第93张图片
2.核心

GOF23设计模式_第94张图片
3.实现

GOF23设计模式_第95张图片

十一、备忘录模式
1.场景

GOF23设计模式_第96张图片
2.核心及实现
GOF23设计模式_第97张图片

你可能感兴趣的:(Java)