20200318java學習之路之設計模式

一:設計模式

  1. java設計模式有23種
  2. 設計模式是一種思想,是解決問題行之有效的方式

二:單例設計模型

  1. 解決問題
    -保證一個類中的對象的唯一性
    -對於多個程序使用同一個配置信息對象時,就必須保證對象的唯一性

  2. 如何保證唯一性?
    -不允許其他程序使用new創建該類對象
    -在該類中創建一個本類實例
    -對外提供一個方法可以讓其他程序去獲取該類對象

  3. 步驟
    -私有化該類構造函數
    -通過new在本類中創建一個本類對象
    -定義一個公有方法,將創建對象返回

三:單例設計模式例題

/**
 *author
 

 */

class Single{
	private static Single s=new Single();
	private Single(){}
	public static Single getInstance(){
		return  s;
	}
}

class SingleDemo{
	public static void main(String [] args){
		Single s1 =Single.getInstance();
		Single s2 =Single.getInstance();
		System.out.println(s1==s2);

		//Single ss =Single.s;
		
		Test t1=new Test();
		Test t2=new Test();
		t1.setNum(10);
		t2.setNum(20);
		System.out.println(t1.getNum());
		System.out.println(t2.getNum());
	}
}

class Test {
	private int num;


	public void setNum(int num){
		this.num=num;
	}
	public int getNum(){
		return num;
	}

}

在這裏插入圖片描述

class Single{
	private static Single s=new Single();
	private Single(){}
	public static Single getInstance(){
		return  s;
	}
}

class SingleDemo2{
	public static void main(String [] args){
		Single s1 =Single.getInstance();
		Single s2 =Single.getInstance();
		System.out.println(s1==s2);

		//Single ss =Single.s;
		
		//Test t1=new Test();
		//Test t2=new Test();
		Test t1=Test.getInstance();
		Test t2=Test.getInstance();
		t1.setNum(10);
		t2.setNum(20);
		System.out.println(t1.getNum());
		System.out.println(t2.getNum());
	}
}

class Test {
	private int num;

private static Test t=new Test();
private Test(){}
private static Test getInstance(){
	return t;
}
	public void setNum(int num){
		this.num=num;
	}
	public int getNum(){
		return num;
	}

}
  1. 第一種代碼輸出值都會輸出

  2. 第二種代碼增加了下面代碼,就會更新新的值覆蓋前面的值
    private static Test t=new Test();
    private Test(){}
    private static Test getInstance(){
    return t;
    }

四:餓漢式 與 懶漢式

  1. 餓漢式
    class Single{
    private static Single s=new Single();
    private Single(){}
    public static Single getInstance(){
    return s;
    }
    }

  2. 懶漢式
    class Single2{
    //類加載進來,沒有對象,只調用getInstance方法時,纔會創建對象
    //延遲加載形式
    private satatic Ssingle2 s=null;
    private Single2(){
    public static Single2 getInstance(){
    if(s==null)
    s=new Single2();
    return s;
    }
    }
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章