1.单例模式

确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对象创建模式。

1.1 饿汉式单例类

当类被加载时,静态变量instance被初始化,此时类的私有构造函数会被调用,单例类的唯一实例将被创建。但是不管用不用得到,这个实例都被创建,占用内存空间。

对应的Java片段:

class EagerSingleton{private static final EagerSingleton instance = new EagerSIngleton();private EagerSingleton() {}public static EagerSingleton getInstance(){return instance}
}

1.2 懒汉式单例类

带有双重检查锁定(Double-Check Locking)的懒汉式单例类。

对应的Java片段:

class LazySingleton{private volatile static LazySingleton instance = null;private LazySingleton() {}public static LazySingleton getInstance() {if (instance == null){synchronized (LazySingleton.class) {if (instance == null) {instance = new LazySingleton();}}}return instance;}
}

1.3 IoDH单例

结合前两种单例模式的优点。在实现IoDH时,需要在单例类中增加一个静态内部类,在该内部类中创建单例对象,再将该单例对象通过getInstance方法返回给外部使用。
对应的Java片段:

class Singleton{private Singleton() {}private static class HolderClass {private final static Singleton instance = new SIngleton();}private static Singleton getInstance() {return HolderClass.instance;}public class void main(String args[]) {Singleton s1, s2;s1 = Singleton.getInstance();s2 = Singleton.getInstance();System.out.println(s1 == s2);}
}

结果必定是true。单例模式的适用场景:系统只需要一个实例对象;客户调用类的单个实例只允许适用一个公共访问点。

2.简单工厂模式

定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态方法,因此又称为静态工厂模式,属于类创建型模式。
工厂模式结构:

(1)Factory(工厂角色):即工厂类,模式的核心,负责创建所有产品实例的内部逻辑。工厂类可直接被外界调用,创建所需的产品对象。在类中提供了静态工厂方法factoryMethod(),返回类型为产品类型Product。
(2)Product(抽象产品角色):它是工厂类所创建的所有对象的父类,封装了各种产品对象的公有方法
(3)ConcreteProduct(具体产品角色):它是简单工厂模式的创建目标,所有被创建的对象都充当这个角色的某个具体类的实例。每个具体产品角色都继承了抽象产品角色Product,需要实现在抽象产品中声明的抽象方法。
对应的Java片段:

abstract class Product {//调用所有产品类的公共业务方法public void methodSame(){//公共方法的实现   }//声明抽象业务方法public abstract void methodDiff();
}class ConcreateProduct extends Product{//实现业务方法public void methodDiff(){//业务方法的实现}
}class Factory{//静态工厂方法public static Product getProduct(String arg){Product product = null;if(arg.equalslgnoreCase("A")){product =  new ConcreateProductA();} else if(arg.equalslgnoreCase("B")){product = new ConcreateProductB();}return product}
}//客户端代码调用
class Client{public static void main(String arg){Product product;product = Factory.getFactory("A");product.methodSame(); product.methodDiff();}
}

3.工厂方法模式

定义一个用于创建对象的接口,让子类决定将那一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又称为工厂模式、虚拟构造器模式、多态工厂模式。
工厂方法模式结构:

在工厂模式结构图中包含以下4个角色:
(1)Product(抽象产品):它是定义产品的接口,是工厂方法模式所创建对象的超类型,也就是产品对象的公共父类。
(2)ConcreteProduct(具体产品):它实现了冲徐昂产品接口,某种类型的具体产品由专门的具体工厂创建,具体工厂和具体产品之间意义对应。
(3)Factory(抽象工厂):在抽象工厂类中,声明了工厂方法(Factory Method),用于返回同一个产品。抽象工厂是工厂方法模型的核心,所有创建对象的工厂类都必须实现该接口。
(4)ConcreteFactory(具体工厂):它是抽象工厂类的子类,实现了抽象工厂类中定义的工厂方法,并可由客户端调用,返回一个具体产品类的实例。
代码参考:https://github.com/Onecat-j/JavaProjects

设计模式-创建型模式(单例、简工、工方)相关推荐

  1. 七大设计原则与设计模式(创建型模式、结构型模式、行为型模式)

    七大设计原则 开闭原则.依赖倒置原则.单一职责原则.接口隔离原则.迪米特法则(最少知道原则).里氏替换原则.合成 (组合).聚合复用原则 开闭原则 定义: 一个软件实体如类.模块和函数应该对扩展开放, ...

  2. 设计模式-创建型模式-抽象工厂模式

    工程源码:设计模式-创建型模式-抽象工厂模式https://download.csdn.net/download/qq_40788199/85544119 码云:设计模式-创建型模式-抽象工厂模式ht ...

  3. 设计模式-创建型模式-工厂方法模式

    工程源码:c++设计模式-创建型模式-工厂方法模式https://download.csdn.net/download/qq_40788199/85541617 码云:https://gitee.co ...

  4. 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript

    设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript 简单工厂模式 定义一个接口,三个具体类.然后书写如下,通过选择,生产出相应的对象 // 定义Shape接口 interface Sh ...

  5. 设计模式-创建型模式-建造者模式

    设计模式-创建型模式-建造者模式 建造者模式即生成器模式,将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 代码如下 // 产品类 public class Product{pu ...

  6. 设计模式-创建型模式-模板方法

    设计模式-创建型模式-模板方法 定义一个操作中的算法框架,将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义一个算法的步骤. protected 对于本包及其子类可见. 类图 代码 代 ...

  7. 设计模式-创建型模式-工厂模式(工厂三兄弟)

    设计模式-创建型模式-工厂模式(工厂三兄弟) 工厂模式分为简单工厂,工厂方法,抽象工厂. 简单工厂模式 一个接口,三个具体类,一个工厂,通过选择,生产出对应的对象. package demo2;pub ...

  8. 设计模式-创建型模式-简单工厂模式

    工程地址:设计模式-简单工厂源码-C++文档类资源-CSDN下载C++设计模式-创建型模式-简单工厂模式源码更多下载资源.学习资料请访问CSDN下载频道.https://download.csdn.n ...

  9. 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern。

    设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. 文章目录 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. eg. 简单工厂模式. 结构. 优 ...

最新文章

  1. 常考数据结构与算法:删除链表的倒数第n个节点
  2. 《剑指offer》c++版本 6.从尾到头打印链表
  3. MyEclipse优化浅析
  4. TCP/IP协议学习
  5. Property #39;sqlSessionFactory#39; or #39;sqlSessionTemplate#39; are required
  6. MySQL 高级- case结构
  7. SAP Spartacus HTML Tags 实现介绍
  8. jq-AJAX 初步了解
  9. Android跟web哪个好,比系统自带的WebView更好用 | AgentWeb
  10. 文字排版不在单调!可临摹的网页UI设计模板,轻松驾驭!
  11. Javascript预解析、代码执行
  12. vs编译调试遇到问题
  13. PHP获取每个订单下订单商品的数量
  14. 最速下降法python_python实现最速下降法
  15. cesium 经纬度绘制点_Cesium搜索经纬度并标点
  16. fgo7.27服务器维护,【FGO日服】维护通知(7/12)
  17. 计算机吴军科学家个人故事,吴军:阅读与写作50讲+吴军个人成长书单
  18. excel表格如何转换成word表格_Excel表格转换为Word表格?99%的人想不到这样做最简单!...
  19. JGJ254-2011 建筑施工竹脚手架安全技术规范 免费下载
  20. CSAPP Lab2:Bomb Lab

热门文章

  1. unity3d修改批量物体材质
  2. 找工作必看:上海知名互联网公司盘点(全)
  3. 用html和js编写黑洞数,黑洞数及其简单理论
  4. NPOI 设置excel 边框
  5. NAS与NAS数据同步
  6. js原型链(详细图解)
  7. 机车车辆 薄轮缘型号 尺寸图 轮对 LM型
  8. R语言数据框中的stringsAsFactors参数
  9. 逻辑回归-非线性判定边界Python代码实现
  10. 2021年处暑是什么时候?处暑的习俗有哪些?