设计模式精炼(一): 创建型00
【摘要】 本文将介绍设计模型之创建型。
工厂模式
简单工厂模式
以继承的思想分别生产不同的产品。
例:
抽象工厂模式
以继承+归类的思想分别生产不同的产品。
例:
工厂方法模式
在抽象工厂模式的基础上,更加复杂化子类,让子类再归类,然后再生产不同的产品。
例:将文件导出为指定形式(html和pdf,但是还要配合具体的部门,比如标准的输出、财务的输出等),如何设计?
建造者模式
建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分离,从而可以生成具有不同的内部表象的产品。
原型模式
给出一个原型对象来指明所创建的对象的类型,然后复制这个原型对象创建出更多同类型的对象。
|- 克隆:克隆的对象和原对象不是同一个对象,但是类型与原对象类型相同。
|- 浅克隆: 所有的对其他对象的引用都仍然指向原来的对象,Object类的clone()方法默认是浅克隆。
|- 深度克隆:除了浅度克隆所要克隆的东西外,还要复制原对象所引用的对象。通常让对象实现Serializable接口,然后写入流(序列化),然后读出来(反序列化)。
例:
例:
单例模式
确保某一个类只有一个实例,单例类需要想全局提供该类的实例。
|- 创建一个静态的私有单例类的实例。
|- 构造方法私有化,避免外界直接new该单例类。
|- 提供一个供外界访问的静态方法。
懒汉模式
需要的时候再new对象。
饿汉模式:先new对象,等到需要再使用。
双重检查加锁
|- 第一重检查:不是每次进入getInstance方法都需要同步,而是先不同步,进入方法后先检查实例是否存在,如果不存在再进入下面的同步块。
|- 第二重检查:进入同步块后,再次检查实例是否存在,如果不存在,就在同步情况下创建一个实例。
Lazy initialization holder class模式
综合使用了Java的类级内部类和多线程缺省同步锁的知识,很巧妙地同时实现了延迟加载和线程安全。
|- 类级内部类:由static 修饰的内部类。
|- 多线程缺省同步锁的知识:在多线程开发中,为了解决并发问题,主要是通过使用synchronized来加互斥锁进行同步控制。但是在某些情况中,JVM已经隐含地为您执行了同步,这些情况下就不用自己再来进行同步控制了。如:
|- 静态初始化器(在静态字段上或static{}块中的初始化器)初始化数据时
|- 访问final字段时
|- 在创建线程之前创建对象时
|- 线程可以看见它将要处理的对象时
例:
|- 枚举实现单例:
本文转载自微信公众号【java学习之道】。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)