JAVA設計模式《二》

來源:互聯網
上載者:User

標籤:

  上一篇為大家介紹了一下設計模式中的責任鏈模式,本篇為大家介紹一下關於設計模式中的單例模式與模板方法模式。單例模式的作用在於,保證應用中某個執行個體有且只有一個,單例模式又被分為:飽漢模式與餓漢模式,兩者的區別在於餓漢模式沒有顯式給出對象的執行個體話。下面我們就一起先瞭解一下單例模式的中的飽漢模式和餓漢模式。

 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設計模式《二》

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.