设计模式
记录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