標籤:tco system 建立對象 prot main class 設計 summary 英語
一,建造者模式(Builder Pattern)
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _4.建造者模式{ //建造者模式(Builder Pattern):將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。建造者模式是一種對象建立型模式。 //與抽象工廠的區別是:抽象工廠是針對系列對象(如會出現各種車對象),然而建立者模式是針對一個對象的局部變化(如單個對象有不同武器等) class Program { static void Main(string[] args) { Builder builder = new USA("黑皮膚", "美國人", "英語"); Director director = new Director(builder); People product = director.Construct(); Console.Write("\r\n"); Builder builder1 = new USA("白皮膚", "英國人", "日語"); Director director1 = new Director(builder1); People product1 = director1.Construct(); Console.ReadKey(); } } /// <summary> /// 建立抽象類別 /// </summary> public abstract class Builder { protected People people = new People(); public abstract void SetCountry(); public abstract void SetSpeak(); public abstract void SetSkinColor(); public People getResult() { return people; } } /// <summary> /// 被建立的對象,對象會出現局部的不同, /// </summary> public class People { public People() { Console.Write("我們都是人,但是"); } } public class USA : Builder { private string _country; private string _speak; private string _skincolor; public USA(string skincolor, string country, string speak) { this._country = country; this._skincolor = skincolor; this._speak = speak; } public override void SetSkinColor() { Console.Write(_skincolor + "的"); } public override void SetCountry() { Console.Write(_country); } public override void SetSpeak() { Console.Write("講" + _speak); } } public class UK : Builder { private string _country; private string _speak; private string _skincolor; public UK(string skincolor, string country, string speak) { this._country = country; this._skincolor = skincolor; this._speak = speak; } public override void SetSkinColor() { Console.Write(_skincolor + "的"); } public override void SetCountry() { Console.Write(_country); } public override void SetSpeak() { Console.Write("講" + _speak); } } /// <summary> /// 執行者,建立對象 /// </summary> public class Director { private Builder builder; public Director(Builder bu) { this.builder = bu; } public People Construct() { builder.SetSkinColor(); builder.SetCountry(); builder.SetSpeak(); return builder.getResult(); } }}
二,根據上面代碼,我們會感覺和抽象工廠很像,他們兩個是什麼呢?
1》建造者模式將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。建造者模式是一種複雜物件建立型模式。
2》抽象工廠則是針對系列對象,建造者模式是一種複雜物件
三,相對抽象工廠和建造者的一種複雜物件怎麼理解呢?
我們就以People為對象來理解:
1》在建造者模式中,我們可以通過抽象的類建立出美國人和英國人對象,而這對象則是有自己獨立的東西等,如黑皮膚的美國人講英語和白皮膚的英國人講日語,這裡的人理解成為同一種複雜的對象
2》而在重抽象工廠中,在英國人工廠中,只能實現白皮膚的英國人講日語。而不會出現實現了黑皮膚的美國人講英語(這個屬於美國人的工廠實現的),所以對於抽象工廠,在此時我們將英國人和美國人理解為兩個不同的對象,所以抽象工廠是針對系列對象
C#設計模式:建造者模式(Builder Pattern)