003.设计模式之单例模式

单例设计模式(★★★★★★)    (笔试必考)
(1)基本概念
   当一个类对外提供且只提供一个对象时,这样的类叫做单例类。   //比如说要打开任务管理器,只能打开一个,而不能打开多个,
   而设计单例类的思想和编程模式叫做 单例设计模式。
 
(2)实现流程
   a.私有化构造方法,使用private关键字修饰;
   b.提供本类类型的引用指向本类的对象,使用private static关键字共同修饰;  
   c.提供公有的get方法负责将对象返回出去,使用static关键字修饰;  
 
(3)实现方式
   单例设计模式分为两种:饿汉式 和 懒汉式,在以后的开发中推荐饿汉式。
 1 public class Singleton{
 2     
 3         //1.将自定义无参构造进行private限制
 4         //此时在Singleton类外无法直接创建对象,只能在类内创建对象
 5         private Singleton(){
 6             
 7         }
 8         
 9         //2.在类内创建了成员对象后,对其进行private封装,此时该创建的对象属于对象层级;
10         //只可以对象来调用,但是在TestSingleton类中无法创建对象,故使用static来使得
11         //该成员对象转换为类层级,此时可以想通过Singleton.sin 来调用,但由于是private封装
12         //故类外无法调用,   只能令找它法
13         //private static Singleton sin = new Singleton();  //饿汉式单例模式构建单例实体
14         private static Singleton sin = null;   //懒汉式单例模式构建单例实例
15         
16         //3.可以创建一个类层级的public的公有方法来实现
17         //此时可以在类外通过调用getInstance() 进行获得类中创建的实例  转=>TestSingleton.java
18         public static Singleton getInstance(){
19                 return sin;
20                 /*if(sin == null){  //懒汉式单例模式构建单例实例
21                         sin = new Singleton();
22                 }
23                 return sin;*/
24         }        
25 }
Singleton.java (详细解析版)
 1 /*
 2         测试Singleton类,要求Singleton类中 只能创建一个对象
 3 
 4 */
 5 public class TestSingleton{
 6     
 7         public static void main(String[] args){
 8                 
 9                 //此时可以创建不止一个对象,原因在于可以调用编译器提供的
10                 //默认的无参构造函数,不受控制,所以需要自定义无参构造函数,
11                 //且加private进行封装,此时在Test类中无法用对象的创建来自动调用无参构造
12                 //此时可以在Singleton类内直接创建一个对象   转=>Singleton.java
13                 /*Singleton s1 = new Singleton();    
14                 Singleton s2 = new Singleton();
15                 System.out.println(s1 == s2);*/
16                 Singleton s3 = Singleton.getInstance();   
17                 Singleton s4 = Singleton.getInstance();   
18                 System.out.println(s3 == s4);   //true     说明只创建了一份实例            
19         }
20 }
TestSingleton.java
 1 /*
 2      编程实现Singleton类的封装
 3  */
 4 public class Singleton{
 5 
 6     //2.提供本类类型的引用指向本类的对象
 7     //private static Singleton sin = new Singleton();  //饿汉式
 8     private static Singleton sin = null;               //懒汉式
 9 
10     //1.私有化构造方法,使用private关键字修饰
11     //表示该构造方法只能在本类的内部使用,不能在类外使用
12     private Singleton(){}
13 
14     //3.提供公有的get方法将上述对象返回出去
15     public static Singleton getInstance(){
16          //return sin;
17          if(null == sin){
18              sin = new Singleton();
19          }
20          return sin;
21     }
22 }
Singleton.java //简析版
 1 /*
 2      编程实现Singleton类的测试
 3  */
 4 public class TestSingleton{
 5 
 6     public static void main(String[] args){
 7 
 8         //Singleton s1 = new Singleton();
 9         //Singleton s2 = new Singleton();
10         //System.out.println(s1 == s2); //false   
11         Singleton s1 = Singleton.getInstance(); 
12         Singleton s2 = Singleton.getInstance(); 
13         System.out.println(s1 == s2); //true
14     }
15 }
TestSingleton.java

猜你喜欢

转载自www.cnblogs.com/keenly/p/9861242.html