常见的几种设计模式——单例设计模式

1 软件设计模式的分类

1.1.  创建型

创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。创建型模式主要有简单工厂模式(并不是23种设计模式之一)、工厂方法、抽象工厂模式、单例模式、生成器模式和原型模式。


1.2.  结构型

用于帮助将多个对象组织成更大的结构。结构型模式主要有适配器模式adapter、桥接模式bridge、组合器模式component、装饰器模式decorator、门面模式、亨元模式flyweight和代理模式proxy


1.3.  行为型

用于帮助系统间各对象的通信,以及如何控制复杂系统中流程。行为型模式主要有命令模式command、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式state、策略模式、模板模式和访问者模式。


2 常见的设计模式

2.1 单例设计模式

单例设计模式的意图是确保一个类有且仅有一个实例,并且它提供一个全局访问点

  很多时候我们需要在应用中保存一个唯一的实例,如后台服务器进程需要一个全局计数器,记录用户访问各个页面的点击数量。如果计数器实例数量非常多,那么势必在计数过程中会出现冲突的情况,为了尽量避免冲突,一个简单的办法就是只有一个计数器实例,所有的计数工作都通过它完成

一般说来单例设计模式分为两类:饿汉式和懒汉式,饿汉式就是一开始就实例化,反之就是懒汉式了。两种实现方式如下:

饿汉式:

	class Singleton{
		private static final Singleton s = new Singleton();
		private Singleton(){}
		public static Singleton getInstance() {
			return s;
		}
	}


懒汉式:

class Singleton{
       private static volatile Singleton singleton = null;
       private Singleton(){}
       public static Singleton getInstance() {
       if (singleton == null) {
		synchronized (Singleton.class) {
                 if (singleton == null) {
		    singleton = new Singleton();
		      }					
		   }
	        }
		return singleton;	
	}
在这里简单解释一下懒汉式加上线程同步锁(synchronized)的原因:当多个线程几乎同时调用Singleton类的getInstance()方法时,静态成员Singleton可能还没有被实例化,因此它可能被不同线程创建了多次,各个线程应用了不同的实例,这就会违背我们“唯一化”的初衷。而用volatile关键字修饰静态成员Singleton,为的是确保多线程访问时,每个线程都能从共享数据中重读改成员变量的值,而当某个线程需要对变量修改时。必须将新值回写到共享内存。这样,两个不同的线程读取的singleton= = null的结果是一致的。






  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值