### 单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。(摘抄)
解决的问题:保证一个类在内存中的对象唯一性。
比如:多程序读取一个配置文件时,建议配置文件封装成对象。会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要该配置文件对象在内存中是唯一的。
~~~
public class Singleton
{
private Singleton(){}
private static Singleton singleton;
public static Singleton getSingleton()
{
if (singleton == null)
{
singleton = new Singleton();
}
return singleton;
}
}
class Client
{
public static void main()
{
Singleton singleton1 = Singleton.getSingleton();
Singleton singleton2 = Singleton.getSingleton();
if (singleton1 == singleton2)
{
System.out.println("yes");
}
else
{
System.out.println("no");
}
}
}
~~~
上面这种单例模式的类加载方式被称为懒汉式(延迟加载方式)
下面这种为饿汉式
~~~
public class Singleton
{
private Singleton(){}
private static Singleton singleton = new Singleton();
public static Singleton getSingleton()
{
return singleton;
}
}
~~~
饿汉式在多线程时不会重复生成实例,因为静态初始化让它在程序加载的时候已经生成实例了,懒汉式如果要在多线程时也不出问题,那么需要双重锁定
~~~
public class Singleton
{
private Singleton(){}
private static Singleton singleton;
public static Singleton getSingleton()
{
if (singleton == null)
{
synchronized (Singleton.class)
{
if (singleton == null)
{
singleton = new Singleton();
}
}
}
return singleton;
}
}
~~~
这样懒汉式也可以在多线程时调用了。
- 前言
- (1)代码无错就是优?——简单工厂模式
- (2)商场促销——策略模式
- (3)&(4)&(5) 设计模式原则
- (6)穿什么有这么重要?——装饰模式
- (7)为别人做嫁衣——代理模式
- (8)雷锋依然在人间——工厂方法模式
- (9)简历复印——原型模式
- (10)考题抄错会做也白搭——模板方法模式
- (11)迪米特法则
- (12)牛市股票还会亏钱?—— 外观模式
- (13)好菜每回味不同——建造者模式
- (14)老板回来,我不知道——观察者模式
- java实现事件委托
- (15)就不能不还DB吗?—— 抽象工厂模式
- (16)无尽加班何时休息——状态模式
- (17)在NBA我需要翻译——适配器模式
- (18)如果再回到从前——备忘录模式
- (19)分公司=部门——组合设计模式
- (20)想走?可以!先买票——迭代器模式
- (21)有些类也需计划生育——单例模式
- (22)手机软件何时统一——桥接模式
- (23)烤羊肉串引来的思考——命令模式
- (24)加薪非要老总批?——职责链模式
- (25)世界需要和平——中介者模式
- (26)项目多也别傻做——享元模式
- (28)男人和女人——访问者模式