[Architecture Pattern] Factory Builder

來源:互聯網
上載者:User

標籤:

[Architecture Pattern] Factory Builder目的

同時提供延遲注入對象、掛載注入項目這兩個功能

情景

在開發系統時,如果需要在已耗用時間才產生並注入對象,可以套用Factory模式來提供延遲注入對象功能。例如:一個監控系統在火警發生時,建立功能對象來啟動相關裝置(洒水裝置、警報裝置、警消通報)。

  • 物件圖

但在實作過程中,延遲注入對象這個功能,常常需要伴隨掛載注入項目功能,用以增加系統的延展性,這時可以接著套用Builder模式,來提供掛載注入項目功能。例如:一個監控系統在火警發生時,依照購買版本建立功能對象來啟動相關裝置(V1:洒水裝置、警報裝置;V2:洒水裝置、警報裝置、警消通報;V3:....)。

  • 物件圖

本篇文章介紹上述這個Factory模式、Builder模式組合而成的Factory Builder模式。這個模式定義對象之間的職責跟互動,用來為系統同時提供延遲注入對象、掛載注入項目這兩個功能,用以增加系統的延展性。主要為自己做個紀錄,也希望能協助到有需要的開發人員。(使用DI Framework也能提供相關功能)

結構
  • 物件圖

參與者System- 擁有一個Factory
  • 使用Factory來產生Product。

  • 使用Product來提供系統功能。

Factory
  • 擁有多個Builder

  • 使用Builder來產生Product。

  • 在條件產生Product情景中,Factory封裝條件邏輯。

Builder
  • 產生Product,產生參數由Builder提供。

  • 在條件產生Product情景中,Builder封裝條件參數。

Productm
  • 封裝系統功能。

  • 透過Builder產生並注入到系統。

合作方式
  • 順序圖

實作
  • 類別圖

  • ActionFactory

    public class ActionFactory{    // Fields    private readonly IEnumerable<ActionBuilder> _actionBuilderCollection = null;    // Constructors    public ActionFactory(IEnumerable<ActionBuilder> actionBuilderCollection)    {        // Default        _actionBuilderCollection = actionBuilderCollection;    }    // Methods    public IEnumerable<IAction> Create()    {        // Result        List<IAction> actionList = new List<IAction>();        // Create        foreach (var actionBuilder in _actionBuilderCollection)        {            var action = actionBuilder.Create();            if (action == null) throw new InvalidOperationException();            actionList.Add(action);        }        // Return        return actionList;    }}
  • ActionBuilder

    public abstract class ActionBuilder{    // Methods    public abstract IAction Create();}
  • Action

    public interface IAction{    // Methods    void Execute();}
  • SecuritySystem

    public class SecuritySystem{     // Fields    private readonly ActionFactory _actionFactory = null;    // Constructors    public SecuritySystem(ActionFactory actionFactory)    {        // Default        _actionFactory = actionFactory;    }    // Methods    public void Execute()    {        // Create        var actionCollection = _actionFactory.Create();        if (actionCollection == null) throw new InvalidOperationException();        // Execute        foreach(var action in actionCollection)        {            action.Execute();        }    }}
  • 系統掛載:洒水裝置、警報裝置

    class Program{    static void Main(string[] args)    {        // Initialize        var actionBuilderList = new List<ActionBuilder>();        actionBuilderList.Add(new WateringActionBuilder());        actionBuilderList.Add(new AlarmActionBuilder());        var securitySystem = new SecuritySystem(new ActionFactory(actionBuilderList));        // Execute        securitySystem.Execute();        // End        Console.ReadLine();    }}

  • 系統掛載:洒水裝置、警報裝置、警消通報

    class Program{    static void Main(string[] args)    {        // Initialize        var actionBuilderList = new List<ActionBuilder>();        actionBuilderList.Add(new WateringActionBuilder());        actionBuilderList.Add(new AlarmActionBuilder());        actionBuilderList.Add(new NotifyActionBuilder());        var securitySystem = new SecuritySystem(new ActionFactory(actionBuilderList));        // Execute        securitySystem.Execute();        // End        Console.ReadLine();    }}

下載

範常式序代碼:點此下載

[Architecture Pattern] Factory Builder

聯繫我們

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