设计模式学习笔记(一)之单例模式

从今天开始要好好花段时间学习一下最常用的几个设计模式;

首先学习一下单例模式(Singleton):单例模式的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个;下面看一下单例模式的UML类图:


看这个图比较简单,Singleton类中顶一个私有的singleton对象,和私有的构造方法,并且向外暴露一个public的getInstance()方法。这个方法来返回singleton对象。

下面直接看模拟代码:

第一种Singleton类的写法

class Singleton { //使用静态私有全局变量保存唯一的实例 private static Singleton singleton; private Singleton() { } /** * 这里保证只会实例化一次,也就是第一次进行实例化,接下来继续调用就不会去实例化 * @return singleton */ public static Singleton getInstance() { if(null==singleton) { singleton=new Singleton(); } return singleton; } } 从代码中进行分析,虽然我们要访问两次(下面的客户端代码是要创建两个实例)getInstance()方法,但是我们返回的是唯一的singleton实例。第一次我们去调getInstance()时会创建一个singleton实例,然后就一直存在于自身类当中,当我们再次去调用getInstance()方法的时候回去判断是否已经存在singleton实例了,存在的时候会直接返回原先已经创建好的singleton实例,这样就可以保证的实例的唯一性了。

第二种Singleton类写法:

class Singleton { private static Singleton singleton=new Singleton(); private Singleton() { } public static Singleton getInstance() { return singleton; } } 下面是客户端代码:

/** * 实现单例模式测试类 * @author jiangqq * */ public class SingletonTest { public static void main(String[] args) { Singleton singleton1= Singleton.getInstance(); Singleton singleton2= Singleton.getInstance(); //返回true 即两个对象具有相同的 if(singleton1==singleton2) { System.out.println("singleton1和singleton2是同一个实例"); } else { System.out.println("singleton1和singleton2不是同一个实例"); } } }

运行结果截图:

至于那种更加好嘛,我比较喜欢使用第一种,不过第一种有个弊端,是在多线程中,可能实现的实例不是唯一;这个时候我们可以通过加锁 lock()方法进行阻塞


总结一下单例模式的一些特点:

1:任何时候在类的程序周期之类只会唯一存在一个实例;

2:单例的类的构造函数是私有的,如果我要去获取单例的实例,必须去通过getInstance()来请求到实例;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值