设计模式精炼(一): 创建型00

举报
且听风吟 发表于 2019/10/28 19:48:46 2019/10/28
3k+ 0 0
【摘要】 本文将介绍设计模型之创建型。

工厂模式

简单工厂模式

以继承的思想分别生产不同的产品。
例:

image.png

抽象工厂模式

以继承+归类的思想分别生产不同的产品。
例:

image.png

工厂方法模式

在抽象工厂模式的基础上,更加复杂化子类,让子类再归类,然后再生产不同的产品。
例:将文件导出为指定形式(html和pdf,但是还要配合具体的部门,比如标准的输出、财务的输出等),如何设计?

image.png

建造者模式

建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分离,从而可以生成具有不同的内部表象的产品。

image.png

原型模式

给出一个原型对象来指明所创建的对象的类型,然后复制这个原型对象创建出更多同类型的对象。
|- 克隆:克隆的对象和原对象不是同一个对象,但是类型与原对象类型相同。
|- 浅克隆: 所有的对其他对象的引用都仍然指向原来的对象,Object类的clone()方法默认是浅克隆。
|- 深度克隆:除了浅度克隆所要克隆的东西外,还要复制原对象所引用的对象。通常让对象实现Serializable接口,然后写入流(序列化),然后读出来(反序列化)。
例:

image.png

例:

image.png

单例模式

确保某一个类只有一个实例,单例类需要想全局提供该类的实例。
|- 创建一个静态的私有单例类的实例。
|- 构造方法私有化,避免外界直接new该单例类。
|- 提供一个供外界访问的静态方法。

懒汉模式

需要的时候再new对象。

image.png

饿汉模式:先new对象,等到需要再使用。

image.png

双重检查加锁

|- 第一重检查:不是每次进入getInstance方法都需要同步,而是先不同步,进入方法后先检查实例是否存在,如果不存在再进入下面的同步块。
|- 第二重检查:进入同步块后,再次检查实例是否存在,如果不存在,就在同步情况下创建一个实例。

image.png

Lazy initialization holder class模式

综合使用了Java的类级内部类和多线程缺省同步锁的知识,很巧妙地同时实现了延迟加载和线程安全。
|- 类级内部类:由static 修饰的内部类。
|- 多线程缺省同步锁的知识:在多线程开发中,为了解决并发问题,主要是通过使用synchronized来加互斥锁进行同步控制。但是在某些情况中,JVM已经隐含地为您执行了同步,这些情况下就不用自己再来进行同步控制了。如:
|- 静态初始化器(在静态字段上或static{}块中的初始化器)初始化数据时
  |- 访问final字段时
  |- 在创建线程之前创建对象时
  |- 线程可以看见它将要处理的对象时
例:

image.png

|- 枚举实现单例:

image.png

本文转载自微信公众号【java学习之道】。

原文链接:https://mp.weixin.qq.com/s?__biz=MzU4NzYwNDAwMg==&mid=2247483996&idx=1&sn=2fcaa6ccde3a8d11ffac343aab889426&chksm=fde8cb11ca9f420788962847983ea30e251611147efcab334aa941252c99ed6e74f6ceb4f20d&scene=0#rd

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。