1、单例模式
饿汉模式(最简单):类加载的时候就创建对象,线程安全
public class Singleton { // 首先,将构造方法 私有化 private Singleton() {}; // 创建私有静态实例,意味着在类加载就会进行创建 private static Singleton instance = new Singleton(); public static Singleton getInstance() { return instance; } }
饱汉模式:(双重效验锁)
public class Singleton { private Singleton() {} // 和饿汉模式相比,这边不需要先实例化出来,注意这里的 volatile,它是必须的 private static volatile Singleton instance = null; public static Singleton getInstance() { if (instance == null) { // 加锁 synchronized (Singleton.class) { // 这一次判断也是必须的,不然会有并发问题 if (instance == null) { instance = new Singleton(); } } } return instance; } }
双重检查,指的是两次检查 instance 是否为 null。
2、工厂模式
1、简单工厂模式
实例化对象不是用new,用工厂方法替代。一个工厂类 XxxFactory,里面有一个静态方法,根据我们不同的参数,返回不同的派生自同一个父类(或实现同一接口)的实例对象。
1 public class FoodFactory { 2 3 public static Food makeFood(String name) { 4 if (name.equals("noodle")) { 5 Food noodle = new LanZhouNoodle(); 6 noodle.addSpicy("more"); 7 return noodle; 8 } else if (name.equals("chicken")) { 9 Food chicken = new HuangMenChicken(); 10 chicken.addCondiment("potato"); 11 return chicken; 12 } else { 13 return null; 14 } 15 } 16 }简单工厂
2、工厂模式
之所以需要引入工厂模式,是因为我们往往需要使用两个或两个以上的工厂。
3、抽象工厂模式
为了解决不同的工厂生产产品的兼容问题,提出抽象工厂。直接选择一家品牌工厂,品牌工厂会负责生产所有的东西,而且能保证肯定是兼容可用的。
3、原型模式
有一个原型实例,基于这个原型实例产生新的实例,也就是“克隆”了。
Object 类中有一个 clone() 方法,它用于生成一个新的对象,当然,如果我们要调用这个方法,java 要求我们的类必须先实现 Cloneable 接口,此接口没有定义任何方法,但是不这么做的话,在 clone() 的时候,会抛出 CloneNotSupportedException 异常。
protected native Object clone() throws CloneNotSupportedException;
Java 的克隆是浅克隆,碰到对象引用的时候,克隆出来的对象和原对象中的引用将指向同一个对象。通常实现深克隆的方法是将对象进行序列化,然后再进行反序列化。
标签:Singleton,创建,模式,工厂,instance,实例,设计模式,public From: https://www.cnblogs.com/coooookie/p/17429292.html