设计模式

记录Java常见的设计模式,后续进行更新

具体代码参考:https://blog.csdn.net/weixin_40834464/article/details/82958187
每一个具体的方法有具体的例子

共有23种,记录一下常见的7种:

  • 创建型模式:单例模式、建造者模式、工厂模式
  • 结构型模式:适配器模式、代理模式
  • 行为型模式:模板方法模式、策略模式

创建型模式

单例模式

一般定义:一个类中只允许有一个实例。 实现思路:让类的构造方法私有化,同时提供一个静态方法去实例化这个类。

  • 懒汉式:在静态方法中初始化。时间换空间。(不推荐,时间很重要)
  • 饿汉式:在声明对象就初始化。空间换时间。(推荐,空间不是问题)
    懒汉式线程不安全,需要加上同步锁,同步锁影响了程序执行效率 饿汉式天生线程安全,类加载的时候初始化一次对象,效率比懒汉式高。
    参考:https://www.jianshu.com/p/d0c444275827

工厂模式

  • 定义:通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。
  • 作用:将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化(创建)哪一个类。
  • 解决问题:生产新产品不需要修改原来的工厂方法。
    参考:https://www.jianshu.com/p/d0c444275827

建造者模式

  • 作用:隐藏创建对象的建造过程 & 细节,使得用户在不知对象的建造过程 & 细节的情况下,就可直接创建复杂的对象,隔离了创建对象的构造表示
  • 参考:https://www.jianshu.com/p/be290ccea05a

结构型模式

适配器模式

  • 定义:定义一个包装类,用于包装不兼容接口的对象
  • 作用:把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。
  • 解决问题:原本由于接口不兼容而不能一起工作的那些类可以在一起工作
  • 参考:https://www.jianshu.com/p/9d0575311214

代理模式

  • 定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用
  • 作用:通过引入代理对象的方式来间接访问目标对象
  • 解决问题:防止直接访问目标对象给系统带来的不必要复杂性。
  • 参考:https://www.jianshu.com/p/a8aa6851e09e

行为型模式

模板方法

  • 定义:定义一个模板结构,将具体内容延迟到子类去实现。
  • 作用:在不改变模板结构的前提下在子类中重新定义模板中的内容。
  • 解决问题:提高代码复用性;实现了反向控制,通过一个父类调用其子类的操作,通过对子类的具体实现扩展不同的行为,实现了反向控制
  • 参考:https://www.jianshu.com/p/a3474f4fee57

策略模式

  • 定义:定义一系列算法,将每个算法封装到具有公共接口的一系列策略类中,从而使它们可以相互替换 & 让算法可在不影响客户端的情况下发生变化
  • 作用:将算法的责任和本身进行解耦
    • 算法可独立于使用外部而变化
    • 客户端方便根据外部条件选择不同策略来解决不同问题
  • 参考:https://www.jianshu.com/p/0c62bf587b9c
posted @ 2020-01-03 20:04  冰糖ryj  阅读(147)  评论(0编辑  收藏  举报