单例模式和简单工厂模式


1.简单工厂模式:

创建一个工厂类,在类中一个创建静态工厂方法,

可以通过传值或者是读取配置文件的方式去加载  父类、接口,然后new出相应子类的实例,用父类或接口去接收,实现多态,称为简单工厂模式,也称静态工厂方法模式。

 

2.单例模式:

单例模式设计要点

保证该类只有一个实例。将该类的构造方法定义为私有方法,这样其他处的代码就无法通过调用该类的构造方法来实例化该类的对象

提供一个该实例的访问点。一般由该类自己负责创建实例,并提供一个静态方法作为该实例的访问点

 

 

饿汉 vs. 懒汉

饿汉 声明实例引用时即实例化

懒汉 静态方法第一次被调用前不实例化,也即懒加载。对于创建实例代价大,且不定会使用时,使用懒加载模式可以减少开销

 

 

 

 

正确双重检查(Double Check)下的懒汉 - 推荐

 

优点:使用了双重检查,同时使用volatile修饰INSTANCE,避免由于多线性同步和可见性问题造成的多实例

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

package com.jasongj.singleton5;

public class Singleton {

  private static volatile Singleton INSTANCE;

  private Singleton() {};

  public static Singleton getInstance() {
    if (INSTANCE == null) {
      synchronized (Singleton.class) {
        if (INSTANCE == null) {
          INSTANCE = new Singleton();
        }
      }
    }
    return INSTANCE;
  }

}

 

 

静态常量 饿汉 - 推荐

优点:实现简单,无线程同步问题

缺点:在类装载时完成实例化。若该实例一直未被使用,则会造成资源浪费

1
2
3
4
5
6
7
8
9
10
11
12
13

package com.jasongj.singleton6;

public class Singleton {

  private static final Singleton INSTANCE = new Singleton();

  private Singleton() {};

  public static Singleton getInstance() {
    return INSTANCE;
  }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值