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()); }
}
|