抽象工程模式


是什麼?spa

怎麼用?code

原理是什麼?對象

在什麼狀況下用?blog


 

 

抽象工廠模式:接口

  提供了一種方式,能夠將一組具備同一主題的單獨的工廠封裝起來。產品

  提供接口,建立一系列相關或獨立的對象,而不指定這些對象的具體類。io

 

適用哪些狀況:class

  一、一個系統要獨立於它產品的建立、表示和組合時原理

  二、一個系統要由多個產品系列中的一個來配置時配置

  三、提供一個產品的類庫,只想顯示它們的接口而不是實現時

 

原理:

  好比一個抽象工廠類叫DocumentCreator,此類提供了建立若干種產品的接口,包括建立信件的createLetter(返回Letter對象)和建立簡歷的createResume(返回Resume對象)。

  系統中的FancyDocumentCreator和ModernDocumentCreator是抽象工廠類的具體實現類,這兩個類分別實現了createLetter和createResume方法(FancyDocumentCreator類的createLetter返回類型是FancyLetter,createResume返回類型是FancyResume。ModernDocumentCreator類的createLetter返回類型是ModernLetter,createResume返回類型是ModernResume)。

  客戶端建立「信件」或「簡歷」時,先要找一個合適的DocumentCreator對象,而後調用它的方法。

 

維基百科code例子:

  假設咱們有兩種產品接口 Button 和 Border ,每一種產品都支持多種系列,好比 Mac 系列和 Windows 系列。這樣每一個系列的產品分別是 MacButton, WinButton, MacBorder, WinBorder 。爲了能夠在運行時刻建立一個系列的產品族,咱們能夠爲每一個系列的產品族建立一個工廠 MacFactory 和 WinFactory 。每一個工廠都有兩個方法 CreateButton 和 CreateBorder 並返回對應的產品,能夠將這兩個方法抽象成一個接口 AbstractFactory 。這樣在運行時刻咱們能夠選擇建立須要的產品系列。

 

一、定義接口

public interface Button {}
public interface Border {}

 

二、實現抽象類

public class MacButton implements Button {}
public class MacBorder implements Border {}

public class WinButton implements Button {}
public class WinBorder implements Border {}

 

三、實現工廠

public class MacFactory {
    public static Button createButton() {
        return new MacButton();
    }
        public static Border createBorder() {
        return new MacBorder();
    }
}
public class WinFactory {
    public static Button createButton() {
        return new WinButton();
    }
        public static Border createBorder() {
        return new WinBorder();
    }
}
相關文章
相關標籤/搜索