不得不懂的C#設計模式學習(一)


       每天有兩個小時要在地鐵上度過,打發枯燥的坐車時間唯有看書。最近在看經典大作大話設計模式,其中的編程思想帶給我很大的震撼。

每天學習一個設計模式(建造者模式)

   建造者模式概述:

      建造則(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類按照次序構建所需的組件。

相關模式

          抽象工廠:重點是工廠模式(簡單或者復雜工廠),而建造者模式重點是由簡單模式構建復雜對象。

          復合模式:經常被用來構建復雜模式。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM