設計模式(3)-- 抽象工廠

1. 寫在前面

上一節中,我們學習了工廠模式,學習了工廠模式中實際上是通過 工廠實現類去創建具體的產品實現對象,從而達到 將產品類 的實現下放到子類(工廠實現類而不是工廠類)中去完成,充分將產品的定義、實現、實例化 三者分開。
這樣如果有新的產品到來的時候,只需要添加對應的 工廠實現類、產品實現類即可。不用修改其他已有的邏輯。


2. 抽象工廠

個人看來,這一節講的 抽象工廠 和上一節講的 工廠模式 之間沒有任何區別(沒錯,是一點區別都沒有)。

直接看代碼

這里的代碼例子和上一節中可以說是一毛一樣,唯一不同的是,產品從一個變成了多個。
因此,工廠要生成對應的多個產品。供應商提供一系列產品
首先是有兩個抽象產品

// Html 文檔 產品接口
public Interface HtmlDocument{
      public void save();
}
// Word 文檔 產品接口
public Interface WordDocument{
      public void save();
}

以及對應的產品實現類

// Html 文檔 產品實現類
public class FastHtml Implements HtmlDocument{
      public void save(){
          sout("saving Html Document...")
      }
}
// Word 文檔 產品實現類
public class FastWord Implements HtmlDocument{
      public void save(){
          sout("saving Html Document...")
      }
}

對應的有一個 抽象工廠類(其實就是工廠類,不過生成多個產品)

public AbstractFactory{
    //   兩個生成方法
    public HtmlDocument createHtml();

    public WordDocument createWord();
}

然后是工廠實現類

public FastFactory Implements AbstractFactory{
    public HtmlDocument createHtml(){
        retrun new FastHtml();
    }

    public WordDocument createWord(){
        retrun new FastWord();
    }
}

下面就是使用了

// 事實上這里寫 FastFactory factory = ... 也是可以的
AbstractFactory factory = new FastFactory();
FastHtml = factory.createHtml();
Fastword = factory.createWord();
// 后面就是對象的使用了
... 

如果這里需要其他的一類產品實現,比如 GoodHtml & GoodWord 的實現,直接加上產品的實現,以及對應的 GoodFactory 即可。

3. 總結

與上一節的一模一樣

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。