3.创建型模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38331606/article/details/87965561
  1. 创建型模式:隐藏对象创建的细节
    1. 单例模式Singleton
  1. 作用:保证在整个JVM运行期间,一个类只有一个实例对象,并提供一个全局的访问站点。
  2. 使用场景:产生唯一的序列号;web中的计数器(使用单例缓存起来不必实时刷新数据库);创建的对象消耗资源过大的情况如I/O以及数据库连接等。
  3. 注意事项:多线程下的线程安全问题。
  4. JDK中使用:Runtime.getRuntime()使用饿汉式加载。
      1. 非线程安全模式

问题:多线程环境下,可能多个线程singleton == null,导致new多个实例对象

 

      1. synchronized修改方法块

问题:并发比较高的情况下,速率很慢

 

      1. DCL模式:指令重排序引发的问题

 

instance = new Singleton() 分为:1-分配内存空间,2-初始化对象,3-设置instance指向内存地址;

指令重排序:

单线程环境下,由于2-3没有数据依赖关系,故可能存在1-2-3 以及 1-3-2两种情况;

假定,某个线程按照1-3-2执行完成第3步,而另外一个线程,进行DCL的外层检查,发现没有问题,可能会返回一个未完全实例化的对象

      1. DCL模式:volatile变量禁止指令重排序

 

      1. 饿汉式(常用):类初始化时完成实例化

 

 

    1. 工厂模式Factory-家具衣服
  1. 作用 对外隐藏对象创建的细节,并将对象的实例化延迟到工厂类中。
  2. 使用场景: jdbc连接数据库,服务器协议连接架构,日志记录器
  3. JDK中使用: Class c = Class.forName(className)

如Boolean b = Boolean.valueOf(true);创建新对象的返回返回的是一个对象

  1. UML案例:设计一个服务器连接架构,存在POP3、IMAP、HTTP协议,使用工厂模式,使外部调用时不用关注内部的协议是如何产生的。日志记录器,记录的日志可能保存在本地硬盘,远程服务器登。

 

    1. 抽象工厂模式AbstractFactory
  1. 作用: 在多个产品族的情况下,对外隐藏对象的实例化,由客户端决定调用哪个产品。
  2. 使用场景: 如家里的家具(衣柜、桌子),衣服(上衣,裤子)等存在两个产品族的情况。
  3. 注意事项: 在增加一个产品族的情况下,维护麻烦。
  4. JDK中使用: 如Arrays#asList()一个创建新对象的方法,但返回的却是一个接口的情况。
  5. UML案例: Color为衣服族,Shape为家具族。

 

 

    1. 建造者模式和工厂模式的区别

均是将对象的创建过程进行了隐藏。

建造者模式倾向于如何创建一个对象实例。

工厂模式则是更倾向于如何获取实例对象。

 

    1. 建造者模式Builder-组装电脑
  1. 作用:将对象的构建顺序和对象本身分离,实现在相同构建顺序情况下产生不同对象的目的。
  2. 使用场景: 在创建一个复杂对象时,在相同的构建顺序(抽象顺序)的情况下,由于执行不同的细节产生不同的对象。
  3. 注意事项: 当组合复杂时,造成建造者过多。
  4. JDK中使用: StringBuilder#append(),StringBuffer#append(),java.sql.PreparedStatement
  5. UML案例: 小明Client需要一个组装电脑Computer,到商店后告知老板(指挥者Director),老板询问小明电脑的用途为上网,于是找到了对应的组装者WebBuilder,于是指挥者Director控制产品的构建顺序(cpu、主板、显示屏的组装顺序)调用对应的组装者完成了组装。组装完成后,小明获取了电脑。

 

 

    1. 原型模式Clone
  1. 作用: 快速获取一个对象的副本,在对副本修改时,不修改原对象。
  2. 使用场景: 细胞分裂场景,对象初始化消耗大量资源(大对象查库),一个对象多个场景修改
  3. 注意事项: 原型对象需实现Clonable接口。
  4. JDK中使用: Object#clone()

设计模式大纲 https://blog.csdn.net/qq_38331606/article/details/87965558

猜你喜欢

转载自blog.csdn.net/qq_38331606/article/details/87965561