1、单例模式

饿汉模式(最简单):类加载的时候就创建对象,线程安全

 饱汉模式:(双重效验锁)

  双重检查,指的是两次检查 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 的克隆是浅克隆,碰到对象引用的时候,克隆出来的对象和原对象中的引用将指向同一个对象。通常实现深克隆的方法是将对象进行序列化,然后再进行反序列化。