標籤:
上一篇為大家介紹了一下設計模式中的責任鏈模式,本篇為大家介紹一下關於設計模式中的單例模式與模板方法模式。單例模式的作用在於,保證應用中某個執行個體有且只有一個,單例模式又被分為:飽漢模式與餓漢模式,兩者的區別在於餓漢模式沒有顯式給出對象的執行個體話。下面我們就一起先瞭解一下單例模式的中的飽漢模式和餓漢模式。
1、飽漢模式:
在我們建立對象時一般JAVA會預設為我們提供一個預設的構造方法,單例模式既然要保證程式中某個對象只有一個執行個體化,所以我們要把我們的構造方法定義為:private私人的,那我們在程式中如何獲得該對象呢?這是我們對外提供一個獲得該對象執行個體的方法,當外部需要獲得執行個體對象時,通過類調用該方法獲得。
/* * 單例模式---飽漢模式 * 保證整個應用程式中某個執行個體有且只能有一個 */public class One { //第一步定義一個無參構造方法,私人化,不允許外部直接建立對象 private One(){ } //定義一個One對象 private static One one = new One(); //提供一個外部調用對象的方法,通過static將該方法定義為全域方法 public static One getOne(){ return one; } }
2、餓漢模式:
餓漢模式的思想和飽漢模式基本相同,只不過餓漢模式沒有提供顯式的對象執行個體。
/* * 單例模式---懶 漢模式 * 單例模式的作用:保證整個應用程式中某個執行個體有且只能有一個 */public class Two { //第一步定義一個無參構造方法,私人化,不允許外部直接建立對象 private Two(){ } //聲明一個Two對象 private static Two two; //提供一個外部調用對象的方法,通過static將該方法定義為全域方法 public static Two getTwo(){ if(two!=null){ two = new Two(); } return two; }}
3、測試:
public class Test { /** * @param 模式測試 */ public static void main(String[] args) { //飽漢模式 One one1 = One.getOne(); One one2 = One.getOne(); if(one1==one2){ System.out.println("兩個對象一致"); }else{ System.out.println("兩個對象不一致"); } //餓漢模式 Two two1 = Two.getTwo(); Two two2 = Two.getTwo(); if(two1==two2){ System.out.println("兩個對象一致"); }else{ System.out.println("兩個對象不一致"); } }}
結果:
下面我們一起來學習一下,關於模板方法模式的知識,模板方法模式就如同我們在設計建築時,我們在保持傳統設計工藝的基礎上,對一些地方進行設計創新,最終達到我們理想的設計效果。
如何為大家介紹呢?下面我們就以一個飲料機為原型為大家介紹一下模板方法模式。假定我們的飲料機可以出兩種飲料:一種咖啡,另一中綠茶,這兩種飲料都有提神的功效,是程式猿的必備。哈哈,這是你拿這杯子來到飲料機前,點擊我要一杯咖啡,這是飲料機就為您提供一杯咖啡;當你點擊我要一杯綠茶時,飲料機就為我們提供了一杯綠茶。這是怎麼一回事呢?下面我們用代碼實現一下:
1、建立一個飲料機類:
/* * 模板方法模式 */public abstract class Robot { public void ZhuShui(){ System.out.println("把水煮沸"); } public abstract void Chong(); public void DaoShui(){ System.out.println("把飲料倒入杯子中"); } public abstract void Add();}
2、建立一個咖啡機類:
public class Coffer extends Robot { public void Add() { System.out.println("加牛奶"); } public void Chong() { System.out.println("沖咖啡"); }}
3、建立一個綠茶機類:
public class Tea extends Robot { public void Add() { System.out.println("加檸檬"); } public void Chong() { System.out.println("沖泡茶葉"); }}
4、測試代碼:
public class Test { /** * @param 模板方法模式測試 */ public static void main(String[] args) { Robot robot1 = new Coffer(); robot1.ZhuShui(); robot1.Chong(); robot1.DaoShui(); robot1.Add(); System.out.println("**********************"); Robot robot2 = new Tea(); robot2.ZhuShui(); robot2.Chong(); robot2.DaoShui(); robot2.Add(); }}
測試結果:
Ok到這裡關於JAVA中模式的單例模式和模板方法模式就為大家介紹完畢。下一篇:適配器模式與Factory 方法模式
JAVA設計模式《二》