如何理解这6种常见设计模式?( 二 )

结构图:
如何理解这6种常见设计模式?
本文插图
时序图:
如何理解这6种常见设计模式?
本文插图
工厂模式总结
(1)适用场景
输出的产品是标准品 , 谁来做都可以 。
(2)举例
常见的数据库连接工厂 , SqlSessionFactory , 产品是一个数据库连接 , 至于是oracle提供的 , 还是mysql提供的 , 我并不需要关心 , 因为都能让我通过sql来操作数据 。
(3)注意事项
项目初期 , 软件结构和需求都没有稳定下来时 , 不建议使用此模式 , 因为其劣势也很明显 , 增加了代码的复杂度 , 增加了调用层次 , 增加了内存负担 。 所以要注意防止模式的滥用 。
【如何理解这6种常见设计模式?】(4)简单实现
package FactoryMethod; public class FactoryPattern { public static void main(String[] args) { Factory factory = new ConcreteFactoryA(); Product product = factory.createProduct(); product.use(); } } //抽象产品:提供了产品的接口 interface Product { public void use; } //具体产品A:实现抽象产品中的抽象方法 class ConcreteProductA implements Product { public void use() { System.out.println(''具体产品A显示...''); } } //具体产品B:实现抽象产品中的抽象方法 class ConcreteProductB implements Product { public void use() { System.out.println(''具体产品B显示...''); } } //抽象工厂:提供了厂品的生成方法 interface Factory { public Product createProduct(); } //具体工厂A:实现了厂品的生成方法 class ConcreteFactoryA implements AbstractFactory { public Product createProduct() { System.out.println(''具体工厂A生成-->具体产品A.''); return new ConcreteProductA(); } } //具体工厂B:实现了厂品的生成方法 class ConcreteFactoryB implements AbstractFactory { public Product createProduct() { System.out.println(''具体工厂B生成-->具体产品B.''); return new ConcreteProductB(); } }2 单例模式(Singleton)
韦小宝有7个老婆 , 但是每个都只有他这一个老公 , 他的所有老婆叫老公时 , 指的都是他 , 他就是一个单例 。
单例模式结构
单例模式包含如下角色:

  • Singleton:单例
结构图:
如何理解这6种常见设计模式?
本文插图
时序图:
如何理解这6种常见设计模式?
本文插图
优缺点
  • 优点:全局只有一个实例 , 便于统一控制 , 同时减少了系统资源开销 。
  • 缺点:没有抽象层 , 扩展困难 。
应用场景
适合需要做全局统一控制的场景 , 例如:全局唯一的编码生成器 。
注意事项
只对外提供公共的getInstance方法 , 不提供任何公共构造函数 。
简单实现
public class Singleton { private static volatile Singleton instance=null;//保证 instance 在所有线程中同步 private Singleton(){}//private 避免类在外部被实例化 public static synchronized Singleton getInstance() { //getInstance 方法前加同步 if(instance == null) { instance = new Singleton(); } return instance; } }3 装饰模式(Decorator)
大学毕业 , 想要送给室友一个有纪念意义的礼物 , 就找到一张大家的合照 , 在上面写上“永远的兄弟!” , 然后拿去礼品店装了个相框 , 再包上礼盒 。 这里的我和礼品店都是装饰器 , 都没有改变照片本身 , 却都让照片变得更适合作为礼物送人 。


推荐阅读