設計模式學習總結2 – 建立型2 – Builder產生器模式

來源:互聯網
上載者:User

Builder產生器模式(建立型)

作用:

Builder產生器模式將產生複雜物件的具體過程和它的建構函式分離開,同樣的構造過程可以執行個體出不同的對象。

Role
The Builder pattern separates the specification of a complex object from its actual construction. The same construction process can create different representations.

設計:

產生器介面IBuilder,定義要Build哪些內容
執行個體對象控制器Director,包含一系列產生對象的操作
產生器Builder,被執行個體化對象控制器Director調用來執行個體化對象
對象Product,由多部分組成的對象

舉例:
IBuilder   製造鋼筆的一系列規範
Director  使用BuilderA製造鋼筆
BuilderA  某種按IBuilder規範製造鋼筆的方法
Product   由多個零件組成的鋼筆
代碼:

 

代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Builder
{
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Reflection;

    namespace BuilderExemple
    {
        class Program
        {
            static void Main(string[] args)
            {
                ComputerFactory factory = new ComputerFactory();
                ComputerBuilder office = new OfficeComputerBuilder();
                factory.BuildComputer(office);
                office.Computer.ShowSystemInfo();
                ComputerBuilder game = new GameComputerBuilder();
                factory.BuildComputer(game);
                game.Computer.ShowSystemInfo();
            }
        }

        class ComputerFactory
        {
            public void BuildComputer(ComputerBuilder cb)
            {
                Console.WriteLine();
                Console.WriteLine(">>>>>>>>>>>>>>>>>>Start Building " + cb.Name);
                cb.SetupMainboard();
                cb.SetupCpu();
                cb.SetupMemory();
                cb.SetupHarddisk();
                cb.SetupVideocard();
                Console.WriteLine(">>>>>>>>>>>>>>>>>>Build " + cb.Name + " Completed");
                Console.WriteLine();
            }
        }

        abstract class ComputerBuilder
        {
            protected string name;

            public string Name
            {
                get { return name; }
                set { name = value; }
            }

            protected Computer computer;

            public Computer Computer
            {
                get { return computer; }
                set { computer = value; }
            }

            public ComputerBuilder()
            {
                computer = new Computer();
            }

            public abstract void SetupMainboard();
            public abstract void SetupCpu();
            public abstract void SetupMemory();
            public abstract void SetupHarddisk();
            public abstract void SetupVideocard();
        }

        class OfficeComputerBuilder : ComputerBuilder
        {
            public OfficeComputerBuilder()
            {
                name = "OfficeComputer";
            }

            public override void SetupMainboard()
            {
                computer.Mainboard = "Abit升技 LG-95C 主板 (Intel 945GC晶片集/LGA 775/1066MHz) ";
            }

            public override void SetupCpu()
            {
                computer.Cpu = "Intel 英特爾賽揚D 336 (2.8GHz/LGA 775/256K/533MHz)  ";
            }

            public override void SetupMemory()
            {
                computer.Memory = "Patriot博帝 DDR2 667 512MB 台式機記憶體";
            }

            public override void SetupHarddisk()
            {
                computer.Harddisk = "Hitachi日立 SATAII介面台式機硬碟 (80G/7200轉/8M)盒裝";
            }

            public override void SetupVideocard()
            {
                computer.Videocard = "主板整合";
            }
        }

        class GameComputerBuilder : ComputerBuilder
        {
            public GameComputerBuilder()
            {
                name = "GameComputer";
            }

            public override void SetupMainboard()
            {
                computer.Mainboard = "GIGABYTE技嘉 GA-965P-DS3 3.3 主板(INTEL P965 東莞產)";
            }

            public override void SetupCpu()
            {
                computer.Cpu = "Intel 英特爾酷睿2 E4400 (2.0GHz/LGA 775/2M/800MHz)盒裝";
            }

            public override void SetupMemory()
            {
                computer.Memory = "G.SKILL 芝奇 F2-6400CL5D-2GBNQ DDR2 800 1G*2台式機記憶體";
            }

            public override void SetupHarddisk()
            {
                computer.Harddisk = "Hitachi日立 SATAII介面台式機硬碟 (250G/7200轉/8M)盒裝";
            }

            public override void SetupVideocard()
            {
                computer.Videocard = "七彩虹 逸彩8600GT-GD3 UP烈焰戰神 H10 顯卡 (GeForce 8600GT/256M/DDR3)支援HDMI!";
            }
        }

        class Computer
        {
            private string videocard;

            public string Videocard
            {
                get { return videocard; }
                set { videocard = value; }
            }

            private string cpu;

            public string Cpu
            {
                get { return cpu; }
                set { cpu = value; }
            }

            private string mainboard;

            public string Mainboard
            {
                get { return mainboard; }
                set { mainboard = value; }
            }

            private string memory;

            public string Memory
            {
                get { return memory; }
                set { memory = value; }
            }

            private string harddisk;

            public string Harddisk
            {
                get { return harddisk; }
                set { harddisk = value; }
            }

            public void ShowSystemInfo()
            {
                Console.WriteLine("==================SystemInfo==================");
                Console.WriteLine("CPU:" + cpu);
                Console.WriteLine("MainBoard:" + mainboard);
                Console.WriteLine("Memory:" + memory);
                Console.WriteLine("VideoCard:" + videocard);
                Console.WriteLine("HardDisk:" + harddisk);
                Console.ReadLine();
            }
        }
    }
}

 

使用情境:

建立對象的各個組成部分的演算法是可以分離的;
組合起來的對象可能會有不同的表現
需要控制對象的構造過程

Use the Builder pattern when…
•  The algorithm for creating parts is independent from the parts themselves.
•  The object to be assembled might have different representations.
•  You need fine control over the construction process.

 

總結:

Builder產生器模式是一種建立型模式,它主要是應對項目中一些複雜物件的建立工作。所謂“複雜物件”,是指:此對象中還含有其它的子物件。Builder模式應有的情景:複雜物件的各個部分的子物件可以用一定的演算法構成;由於需求的變化,這個複雜物件的各個部分經常面臨著劇烈的變化,但是將各個部分的子物件組合在一起的演算法卻相對穩定。簡單的說:子物件變化較頻繁,對組合子物件演算法相對穩定。
    這是解決一個複雜物件的建立工作,現在變化的部分和相對穩定的部分已經明確,我們要做的是隔離變化,如何將子物件和演算法隔離是要解決的問題。
    《設計模式》中說道:將一個複雜物件的構建與其表示向分離,使得同樣的構建過程可以建立不同的表示。Builder模式的幾個要點:
    1、用於構建一個複雜的對象,但這個對象構建的演算法是穩定的,對象中的各個部分經常變化。
    2、在於應對複雜物件各個部分的頻繁需求變動。但是難以應對演算法的需求變動。這點一定要注意,如果用複雜物件的內部子物件的組合演算法不穩定,使用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.