单例设计

1.单例设计Singleton的引出

   单例设计,从名字上首先可以看出单---即只有一个,例---只的是实例化对象;那么单例也就是说一个类,只产生了一个实例化对象。但是我们都知道,一个类要产生实例化对象很容易,只需要通过new关键字,new出来就可以了,怎么可能一个类只产生一个实例化对象呢,其实试想想,实例化对象的产生有一条必经之路,那就是构造方法。

   什么是构造方法,构造方法是类进行实例化对象的必经之路,只有通过构造方法,才能为类的成员进行初始化,并开辟相应的堆空间进行存储。那么接着上面的来说,一个类要只产生一个实例化对象,那就必须控制这个构造方法,如何做?  如果我们将这个构造方法用private关键字修饰起来,也就说构造方法私有化,那么在这个类的外部就无法来new出实例化对象了,那就产生了一个类只有一个实例化对象了。具体代码如何实现呢,单例设计模式可分为:恶汉方式的单例设计模式

package com.huawei.madejin.demo;
  
  class Singleton
  {
      private final static Singleton INSTANCE = new Singleton();//实例化对象
      private Singleton(){}//私有的方法
      
      public static Singleton getInstance()
      {
         return INSTANCE;
     }
     
     public void print()
     {
         System.out.println("Hello World");
     }
     
 }
 public class SingletonTest {
 
     /**
      * @param args
      */
     public static void main(String[] args) {
         // TODO Auto-generated method stub
         Singleton s = Singleton.getInstance();
        s.print();
     }
 
 }

  第二种被称为懒汉方式的设计模式:


package com.huawei.madejin.demo; 

class Singleton 

//private final static Singleton INSTANCE = new Singleton(); 
private static Singleton INSTANCE = null; 
private Singleton(){} 

public static Singleton getInstance() 

if(INSTANCE == null) 

INSTANCE = new Singleton();; 

return INSTANCE; 


public void print() 

System.out.println("Hello World"); 



public class SingletonTest { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
// TODO Auto-generated method stub 
Singleton s = Singleton.getInstance(); 
s.print(); 




 

改进的设计如下:

package com.huawei.madejin.demo; 

class Color 

private String title; 

private final static Color RED = new Color("red"); 
private final static Color BLUE = new Color("blue"); 
private final static Color GREEN = new Color("green"); 

public static Color getColor(int i) 

switch(i) 

default: 
case 0 : 
return RED; 
case 1: 
return BLUE; 
case 2: 
return GREEN; 


private Color(String title){ 
this.title = title; 


public String toString(){ 
return this.title; 



public class MultitonTest { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
// TODO Auto-generated method stub 
Color c= Color.getColor(1); 
System.out.println(c.toString()); 






 

posted @ 2020-04-24 15:52  星空物语之韵  阅读(129)  评论(0编辑  收藏  举报