每天有兩個小時要在地鐵上度過,打發枯燥的坐車時間唯有看書。最近在看經典大作大話設計模式,其中的編程思想帶給我很大的震撼。
每天學習一個設計模式(建造者模式)
建造者模式概述:
建造則(Builder Pattern)也叫做生成器模式,提供一種“封裝機制”來隔離出"復雜對象的各個部分"的變化,從而保持"穩健構建算法"不隨着需求改變而改變。
(將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示.)
在建造者模式中,有如下四個角色:
Product產品類:
通常是實現了模板方法模式,也就是有模板方法和基本方法。
Builder抽象建造者:
規范產品的組建,一般是由子類實現。
ConcreteBuilder具體建造者
實現抽象類定義的所有方法,並返回一個組件好的對象。
Director導演
負責安排已有模塊的順序,然后告訴Builder開始創建。
代碼清單:
public class Product { IList<string> parts = new List<string>(); public void Add(string str) { parts.Add(str); } public void Show() { Console.WriteLine("\n產品創建-----"); foreach (string item in parts) { Console.WriteLine(item); } } } public abstract class Builder { public abstract void BuilderPartA(); public abstract void BuilderPartB(); public abstract Product GetResult(); } class ConcreteBuilder1 : Builder { private Product product = new Product(); public override void BuilderPartA() { product.Add("部件A"); } public override void BuilderPartB() { product.Add("部件B"); } public override Product GetResult() { return product; } } public class ConcerteBulider2 : Builder { private Product product = new Product(); public override void BuilderPartA() { product.Add("部件X"); } public override void BuilderPartB() { product.Add("部件Y"); } public override Product GetResult() { return product; } } public class Director { public void Construct(Builder builder) { builder.BuilderPartA(); builder.BuilderPartB(); } }
static void Main(string[] args) { Director director = new Director(); Builder b1 = new ConcreteBuilder1(); Builder b2 = new ConcerteBulider2(); director.Construct(b1); Product p1 = b1.GetResult(); p1.Show(); director.Construct(b2); Product p2 = b2.GetResult(); p2.Show(); }
總結:建造者模式的實質是解耦組裝過程和創建具體部件,使得我們不關心每個部件是如何組裝的。
建造者模式的奧妙在於Builder將構建次序交給Director類按照次序構建所需的組件。
相關模式
抽象工廠:重點是工廠模式(簡單或者復雜工廠),而建造者模式重點是由簡單模式構建復雜對象。
復合模式:經常被用來構建復雜模式。