23种设计模式详解 代码例举 和 易混淆模式对比

构造类型:

 单例模式、工厂模式、抽象工厂模式、原型模式、建造者模式。

 

单例:

  单例写法有很多种,非线程安全的不推荐,部分依赖语言的也不推荐,建议使用饿汉式或者双if 检查写法

   饿汉式写法:

  

  懒汉式写法(非线程安全):
  懒汉式写法(线程安全):

  

  懒汉式写法(双if检查写法):

  

 

  懒汉式(双if检查+volatile):

  

  内部类写法:

  

  枚举写法:

  

 

 

 

 单例我们需考虑三个因素

1 单实例对象(枚举,静态常量天然就是单实例)
2 线程安全(类加载过程天然就是线程安全,也可通过sync 等锁来控制)
3 尽量懒加载(类枚举天然就是用到才加载,或者通过代码控制)

 

工厂模式:

 

  简单工厂:

 

  

  抽象工厂(多工厂):我们可以,单工厂生产的是一个维度不同产品,多工厂是两个维度的变化的产品。

  

 

 

 

原型模式: 

  Java Object 对象的clone就是用法原型模式,使用的浅拷贝,

  如果需要深拷贝可以考虑重写clone方法,然后通过 Java对象序列化接口输出到ObjectOutputStream然后再反序列化回来,或者是通过json工具序列化成JSON在反序列回来,也可以在指定需要深拷贝的字段上调用clone 方法。

 

原型模式类图:

 

 

 

 

  

 

 建造器模式:

    用处在于处理配置属性的一些检查,依赖,顺序等问题,直接new  然后设置容易遗漏,然后遗漏的问题只会在后面的使用中被发现,不同实现的构造器可以按照不同的方式构造对象,把构造过程和产品解耦了

  

  

  

 

 

 

 

结构类型:

  适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。

 

适配器模式:

  就是装换接口方法名字和理论实现类方法名字不一样的

 

 类的适配器:可以继承类的时候使用

  

  

 

 对象适配器:不能继承对象,并且已经有对象实例的情况使用

  

  

接口的适配器:
接口有一堆方法,继承都需要重写,但是很多接口我们用不着,这时候需要接口适配器

 

  

 

 桥接模式:

  

  

装饰器模式:

 

  

 

组合模式:

  树形结构嵌套模式,Java的 Map就是这种结构

  

外观模式:

  

解决 部分逻辑依赖的方法或者接口多而且繁杂,这时候需要一个统筹来简化调用过程的类,核心是定义一个高层接口,来统筹复杂的过程

 

  

 蝇量模式:

  用于池,缓存,减少反复创建同样对象的消耗

 

  

 

代理模式:

  

 

行为类型:

  模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

 

 

模板方法

  

 

命令模式:

  把调用者和命令分开,调用者不需要知道命令是怎么实施的,(命令接受者是不是必须的呢?我感觉没什么必要)

 

  

访问者模式:

  让资源和针对资源的行为分开,是行为的变化拓展变得简单,但是资源类型的变化变得十分困难

 

  

迭代器模式:

  

 观察者模式:

  让感兴趣的事件监听者,可以容易的感知事件的变化

  

策略模式:

  通过改变策略对象,改变真实执行的逻辑

  

 责任链模式:

    用户数据需要被多次处理的情况

  

备忘录模式:

  

 

 

状态模式:

  和策略模式类似,强调状态改变以后做的事情不一样,并且状态伴随流程变化而变化,状态内部改变,策略模式是外部介入改变策略

  

 

 

中介者模式:

  

 

 

 

解释器模式:

  为解释表达式之类的业务提供的设计模式,使解释表达式变得容易拓展

 

posted on   zhangyukun  阅读(84)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示