JAVA單態設計模式,JAVA態設計模式

來源:互聯網
上載者:User

JAVA單態設計模式,JAVA態設計模式

核心--在類的內部把構造器私人化,同時在內部產生對象,並通過類.靜態方法(static)返回執行個體化對象的引用

 

設計模式是在大量的實踐總結和理論化之後優選的代碼結果,編程風格,以及解決問題的思考方式.設計模式就像是經典的棋譜,不同的棋局我們用不同的棋譜.

單態設計模式:採取一定的方法保證在整個軟體系統中,對某個類只能產生一個對象執行個體,並且該類只提供一個取得其對象的執行個體方法.

在java中實現單態模式只需要執行以下三步:  

  1.將類的構造方法的存取權限聲明為private.這樣就不能用new操作符在類的外部產生類的對象了,但在類內部仍可以產生該類的對象.

  2.在類內部產生一個靜態執行個體.

  3.提供一個靜態方法用於外部取得該類的執行個體.

  因為在類的外部無法得到類的對象,所以只能調用該類的某個靜態方法以返回類內部建立的對象,又因為靜態方法只能訪問類中的靜態成員變數,所以,指向類內部產生該類對象的變數也必須定義成靜態.

 

 

 

class Chinese{

    static Chinese objRef = new Chinese();

   

    private Chinese(){}

    public static Chinese getInstance(){

        return objRef;

    }

}

 

class Chinese_opt{

    static Chinese_opt objRef = null;

    private Chinese_opt(){}

    public static Chinese_opt getInstance(){

        if(objRef == null)

            objRef = new Chinese_opt();

        return objRef;

    }

   

}

class TestChinese{

    public static void main(String[] args){

        Chinese chinese1 = Chinese.getInstance();

        Chinese chinese2 = Chinese.getInstance();

        System.out.println(chinese1 == chinese2);

    }

}

 

 

 

 

 

 

1:構造方法私人化:

物件導向編程的三大特性:封裝、繼承、多態。類的封裝性不僅體現在對屬性的封裝上,實際上方法也是可以被封裝的,構造方法是特殊的方法當然也可以被封裝,例如下面的代碼就是對構造方法的封裝:

package com.zxf.javaopp;

 

public class Singleton {

    private Singleton(){     // 將構造方法進行了封裝,私人化  

    }

    public void print(){

       System.out.println("Hello World!!!") ;

    }

}

建構函式被私人化,不能在外部執行個體化,就無法在外部使用,此時只能在該類的內部執行個體化對象了,然後將該類拿到外部進行使用,由於該類不能再外部執行個體化,此時在內部的執行個體化必須是用static關鍵字修飾的:代碼如下:

package com.zxf.javaopp;

 

class Singleton1{

    static Singleton1 instance = new Singleton1() ;  // 在內部產生本類的執行個體化對象

    private Singleton1(){       // 將構造方法進行了封裝,私人化  

    }

    public void print(){

       System.out.println("Hello World!!!") ;

    }

}

public class SingletonDemo01{

    public static void main(String args[]){

       Singleton1 s1 = null ;   // 聲明對象

       s1 = Singleton1.instance ;  // 取得執行個體化對象

       s1.print() ;      // 調用方法

    }

}

雖然上面的代碼實現了功能,但又有些問題:通常情況下:我們將屬性封裝,此時的代碼就要修改如下:

package com.zxf.javaopp;

 

class Singleton1{

    static Singleton1 instance = new Singleton1() ;  // 在內部產生本類的執行個體化對象

    public static Singleton1 getInstance(){       // 通過靜態方法取得instance對象

       return instance ;

    }

    private Singleton1(){       // 將構造方法進行了封裝,私人化  

    }

    public void print(){

       System.out.println("Hello World!!!") ;

    }

}

public class SingletonDemo01{

    public static void main(String args[]){

       Singleton1 s1 = null ;   // 聲明對象

       s1 = Singleton1.getInstance() ; // 取得執行個體化對象

       s1.print() ;      // 調用方法

    }

}

以上的代碼似乎變得很複雜,不如不將構造方法執行個體化呢,但是為什麼又會這樣做呢?

假如我們現在要產生幾個對象:按以往的代碼,就需要執行個體化多次,每個對象都有其對應的堆棧空間,此時的記憶體就消耗的很多,系統的效率坑定比較低,但是使用將構造方法封裝的模式效率就比較高:



 使用將構造方法封裝的方法:無論產生多少個對象,我們只執行個體化一次,這樣的設計在設計模式上稱為單態設計模式(單例設計模式):

singleton,如果不希望一個類產生多個執行個體的話,則必須使用單態設計模式,此設計模式,在以後的高效能開發中經常使用,而且在java的類庫中大量的使用了此設計模式。

    所謂單態就是在入口處限制了對象的執行個體操作。

    單態設計模式的意義:

實際上這種模式非常常用,我們大家使用的windows作業系統中就使用了此設計模式,windows中用一個斷行符號站: ,除了案頭以外,其他的每個硬碟中都有一個斷行符號站,其他的斷行符號站和其他硬碟的每個斷行符號站都是同一個,也就是所整個作業系統中有且只有一個斷行符號站,各個地方只是引用此執行個體。

總結:

單態設計模式的核心就是將類的

 建構函式私人化,在類的內部產生執行個體對象,並通過類的靜態方法返回類的執行個體對象。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.