设计模式之单例模式
设计模式是软件开发人员的一种编码经验的总结,遇到一般问题的通用解决方案,并被众多开发人员所知晓认可;
以下是公认的几类设计模式
创建型模式
- 工厂方法模式、建造者模式、抽象工厂模式、原型模式、单例模式
结构型模式
- 桥接模式、代理模式、享元模式、外观模式、装饰器模式、组合模式、适配器模式
行为型模式
- 备忘录模式、解释器模式、命令模式、中介模式、观察者模式、策略模式、状态模式、模板方法模式、访问者模式、迭代子模式、责任链模式
接下来先来记录下我对单例模式的理解:
单例模式是为了解决什么问题呢?使一个类的对象成为这个类系统中唯一的实例化对象
单例模式可以归纳为:一个类只有一个实例,自动实例化并提供给整个类系统
几个重要的概念:1、该类只能有一个实例化对象 (提供私有的构造方法)
2、必须自动创建实例化对象 (含有一个静态的该类私有对象)
3、必须自行向整个系统提供实例 (提供一个静态的公有的方法用于创建、获取该类的私有静态对象)
以下为两种经典方案的代码实现:饿汉PK懒汉
1 package com.designpattern.singleton; 2 3 //饿汉式:创建对象实例的时候直接初始化 空间换时间 4 public class SingletonHungry { 5 //1、创建类中私有构造 6 private SingletonHungry(){ 7 8 } 9 10 //2、创建该类型的私有静态实例 11 private static SingletonHungry instance=new SingletonHungry(); 12 13 //3、创建公有静态方法返回静态实例对象 14 public static SingletonHungry getInstance(){ 15 return instance; 16 } 17 }
1 package com.designpattern.singleton; 2 //懒汉式:类内实例对象创建时并不直接初始化,直到第一次调用get方法时,才完成初始化操作 3 //时间换空间 4 public class SingletonLazy { 5 //1、创建私有构造方法 6 private SingletonLazy(){ 7 8 } 9 10 //2、创建静态的该类实例对象 11 private static SingletonLazy instance=null; 12 13 //3、创建开放的静态方法提供实例对象 14 public static SingletonLazy getInstance(){ 15 if(instance==null) 16 instance=new SingletonLazy(); 17 18 return instance; 19 } 20 }
饿汉模式是在类加载时就创建实例,而懒汉是在第一次使用时才实例化,相比较饿汉第一次加载速度要快于懒汉,但是由于饿汉的实例创建时间比较早,如果长期不调用,会暂用系统空间。总结来说,饿汉是以空间换时间,而懒汉是时间换空间