1. 程式人生 > >Java—單例設計模式(餓漢單例,懶漢單例)和多例設計模式

Java—單例設計模式(餓漢單例,懶漢單例)和多例設計模式

1.單例模式

定義:一個類只允許產生一個例項化物件。

a.物件如何產生?
通過類的構造方法

b.要想限制物件的產生?
通過構造方法限制,構造方法私有化,類外部無法產生例項化物件。

餓漢式單例:上來就new

//餓漢式單例

class Singleton{
	//類內部提供例項化物件
	private static final Singleton SINGLETON = new Singleton();
	//構造方法私有化,類外部無法產生例項化物件
	private Singleton(){}
	//物件方法
	public static Singleton getSingleton(){
	return SINGLETON;
	}
}

懶漢式單例:用時在new(雙重加鎖單例模式)

class Singleton {
    private static final Singleton SINGLETON;

    private Singleton() {}  // private宣告構造
    private  static Singleton getSingleton(){
    
        if(SINGLETON == null){  // 表示此時還沒有例項化
            SINGLETON = new Singleton();
        }
        return SINGLETON;
    }
}

2.多例模式(知道概念)——有限個數物件

所謂多例只是比單例多了一些例項化物件而已。之後我們會用列舉完全取代多例模式。

//多例——描述性別類
class Sex{
    private String title;
    public static final int MALE_FLAG = 1;
    public static final int FEMALE_FLAG = 2;

    private static final Sex MALE = new Sex("男");
    private static final Sex FEMALE = new Sex("女");
    private Sex(String title){
        this.title = title;
    }
    public static Sex getInstance(int flag) {
        switch (flag) {
            case MALE_FLAG:
                return MALE;
            case FEMALE_FLAG:
                return FEMALE;
            default:
                return MALE;
        }
    }

    @Override
    public String toString() {
        return this.title;
    }
}
public class Test{
    public static void main(String[] args) {
        Sex male = Sex.getInstance(Sex.MALE_FLAG);
        Sex female = Sex.getInstance(Sex.FEMALE_FLAG);
        System.out.println(male);
        System.out.println(female);
    }