C#設計模式(5)-建造者模式

來源:互聯網
上載者:User

標籤:image   bst   sof   視頻   .text   disk   erp   對象   rdd   

引言

 上一篇介紹了設計模式中的抽象原廠模式-C#設計模式(3)-抽象原廠模式,本篇將介紹建造者模式

點擊這裡查看全部設計模式系列文章導航

建造者模式簡介

建造者模式是將一個複雜物件的構建與表示分離,使得同樣的構建過程可以建立不同的表示。

    在軟體系統中,有時候會面臨著“一個複雜物件”的建立工作,其通常由各個部分子物件用一定的演算法構成;由於需求的變化,這個複雜的對象的各個部分可能面臨著劇烈的變化,但是把他們組合在一起的演算法很穩定。提供一種“封裝機制”來隔離出“複雜物件的各個部分”的變化,從而保持系統中的“穩定構建演算法”不隨著需求的改變而改變。

執行個體情境

對於軟體公司來講,公司有研發人員和非研發人員(包括行政人員、管理員等),每次入職新人,公司的IT人員就需要給新員工配一台電腦,但不同員工需要不同的配置的電腦,研發人員需要配置較高一點的電腦,行政人員需要的配置要求就沒那麼高;當然需要的配置可能很多,如安裝公司用來遊戲比賽時用的電腦、UE工程師使用的電腦、做視頻用等等需要的配置可能都一樣;這裡我們僅以研發用電腦、辦公用電腦為例;

但無論配置高低都需要給入職人員配置一台新電腦;下面我們用該情境講解一下建造者模式;

執行個體代碼類圖

建造者

 

建造者抽象類別,這裡講安裝電腦的過程標準化

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace BuilderPattern{    /// <summary>    /// 抽象安裝電腦過程    /// </summary>    public abstract class ComputerBuilder    {        /// <summary>        /// 安裝記憶體條        /// </summary>        public abstract void SetupMemory();        /// <summary>        /// 安裝硬碟        /// </summary>        public abstract void SetupHarddisk();        /// <summary>        /// 安裝作業系統        /// </summary>        public abstract void SetupOperatingSystem();        //安裝電腦還需要其它很多步驟,如安裝CPU、主板等等,這裡不全部列舉    }}

如果安裝研發人員使用的電腦

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace BuilderPattern{    /// <summary>    /// 安裝研發人員使用電腦    /// </summary>   public class DevelopmentComputerBuilder:ComputerBuilder    {        /// <summary>        /// 安裝記憶體        /// </summary>        public override void SetupMemory()        {            Console.WriteLine("安裝一個12G記憶體條(開發機記憶體需要配置大一點)");        }        /// <summary>        /// 安裝硬碟        /// </summary>        public override void SetupHarddisk()        {            Console.WriteLine("安裝一個1T硬碟");        }        /// <summary>        /// 安裝作業系統        /// </summary>        public override void SetupOperatingSystem()        {            Console.WriteLine("安裝WIN7系統(開發機需要安裝各種開發工具,win7系統較穩定)");        }    }}

如果安裝普通辦公使用的電腦

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace BuilderPattern{    /// <summary>    /// 安裝普通辦公電腦    /// </summary>    public class OfficeComputerBuilder:ComputerBuilder    {        /// <summary>        /// 安裝記憶體        /// </summary>        public override void SetupMemory()        {            Console.WriteLine("安裝一個4G記憶體條");        }        /// <summary>        /// 安裝硬碟        /// </summary>        public override void SetupHarddisk()        {            Console.WriteLine("安裝500G硬碟");        }        /// <summary>        /// 安裝作業系統        /// </summary>        public override void SetupOperatingSystem()        {            Console.WriteLine("安裝WIN10系統");        }    }}

當然需要的配置可能很多,如安裝公司用來遊戲比賽時用的電腦、UE工程師使用的電腦、做視頻用等等需要的配置可能都一樣;這裡不一 一列舉;

指揮者

指揮者類的目的就是根據使用人需求的不同來安裝電腦,而使用人或者使用者不需要知道安裝的過程,而這裡面的每一個步驟都是必須的;

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace BuilderPattern{    class ComputerDirector    {        public void ConstructComputer(ComputerBuilder builder)        {            //安裝記憶體條            builder.SetupMemory();            //安裝硬碟            builder.SetupHarddisk();            //安裝作業系統            builder.SetupOperatingSystem();        }    }}
業務調用
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace BuilderPattern{    class Program    {        static void Main(string[] args)        {            Console.WriteLine("----------------開始安裝電腦-------------------------------------");            //研發人員使用電腦安裝 建造者            ComputerBuilder builder = new DevelopmentComputerBuilder();            //普通辦公使用電腦安裝 建造者            //ComputerBuilder builder = new OfficeComputerBuilder();            ComputerDirector director = new ComputerDirector();            director.ConstructComputer(builder);            Console.WriteLine("----------------安裝完成--------------------------------");            Console.ReadKey();        }    }}

如果安裝研發使用電腦,運行結果如下

如果安裝普通辦公使用電腦,運行結果如下

 

建造者模式結構圖

 

 

本文執行個體中:

Builder就是安裝電腦的抽象類別 ;

ConstructBuilder為具體的建造者,就是上述的辦公用電腦安裝、研發用電腦安裝;均具體實現了電腦安裝抽象類別;

Product產品就是具體的電腦;

Derictor,指揮者,上述樣本即根據使用者具體的需求安裝不同配置的電腦;

總結 適用情境

 1、需要產生的產品對象有複雜的內部結構,這些產品對象通常包含多個成員屬性。 
 2、隔離複雜物件的建立和使用,並使得相同的建立過程可以建立不同的產品。

建造者模式所建立的產品一般具有較多的共同點,其組成部分相似,如果產品之間的差異性很大,則不適合使用建造者模式。

優缺點

優點:

    建造者模式的使用使得產品的內部表象可以獨立的變化。使用建造者模式可以使用戶端不必知道產品內部組成的細節。 

    將複雜產品的建立步驟分解在不同的方法中,使得建立過程更加清晰,使得我們能夠更加精確的控制複雜物件的產生過程。

    每一個Builder都相對獨立,而與其它的Builder無關(一個產品有一個Builder相對應),可以很方便的增加或替換建造者。 

缺點:

     建造者的缺點在與如果產品的內部變化複雜,可能會導致需要定義很多具體建造者類來實現這種變化,導致系統變得很龐大,這樣這個模式就不適用。

C#設計模式(5)-建造者模式

聯繫我們

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