回覆列表
  • 1 # 使用者2681768447859

    在Java中,建構函式的訪問級別通常是public, 它提供了一個構造該類物件的介面。可是你知不知道,把建構函式的級別設為private, 有一些特別用處。

    先來看一段程式碼:

    //Shape。java

    public class Shape {

    private Shape() {

    /* set something here */

    }

    public static Shape makeShape(/* arglist */) {

    System。

    out。println("here is the shape you ordered");

    return (new Shape());

    }

    public static void main(String args[]) {

    Shape。

    makeShape();

    }

    }

    首先從語言角度分析,我們可以知道, 任何類的使用者都無法使用建構函式來生成一個圖形, 因為建構函式是私有的,無法被類以外的函式使用。而只能透過呼叫makeShape來實現。

    也許你會問,為什麼不直接使用建構函式來生成圖形,而需要使用一個看上去多餘的makeShape方法呢?

    這樣做有以下幾個好處:

    1。

    你可以返回任何的Shape型別,包括Shape的子類。比如你可以把makeShape寫成這樣:

    public static Shape makeShape(/* arglist */) {

    System。out。println("here is the shape you ordered");

    if (retangle)

    return (new Retangle(/* arglist*/));

    if (Circle)

    return (new Circle(/* arglist */));

    /* you can return as many shapes as you like */

    }

    這裡假設Retangle 和 Circle 都是shape的子類,並且和Shape類在同一個包?,Shape類可以訪問子類的建構函式。

    這樣shape就提供了一個圖形工廠。 使用者透過一個介面就可以生成不同的圖形。事實上,這種用法被稱為“工廠模式”。

    2。可以實現一個類只有一個物件。請看下面的程式碼

    //Handler。

    java

    public class Handler {

    private Handler handler = null;

    private Handler() {

    /* set something here */

    }

    public static getHandler(/* arglist */) {

    if (!handler)

    handler = new Handler();

    }

    }。

  • 中秋節和大豐收的關聯?
  • 如果抗癌藥大降價,那麼癌症就可以治癒了嗎?對此你怎麼看?