建造者模式

建造者模式(Builder),將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示(過程是穩定的)。ide

從建造者模式的定義來看,確定是一頭霧水,說的都是什麼跟什麼呀!舉個小例來理解下:當咱們來實現一個畫畫的功能,要求畫瘦的人和胖的人。畫的過程是穩定的,即:頭、胳膊、身體、腿都是必須的。而畫的具體實現是不同的,例如:頭大、肚子大、腿長等。這時再去理解建造者模式的定義就簡單多了。ui

 

UML圖:spa

 

Builder抽象類中定義各個部分的方法的抽象方法(例:定義了畫胳膊、畫頭、畫腿等方法)。
ConcreteBuilder類是各類不同具體表示,它具體實現了Builder中的方法,而且返回一個結果。(例:實現了具體畫怎樣的頭、胳膊、腿等,並返回構造的這我的)
product類是具體產品,即:要建造的產品。例:頭、胳膊、腿等都是要建造人
3d

 

代碼:code

 

    //抽象建造者類
    public  abstract class Builder
    {
        public abstract void Head();
        public abstract void Body();
        public abstract void Leg();
    }
抽象建造者類:Builder

 

    //具體建造者類
    class ConcreteBuilderA:Builder
    {
        private Person person = new Person();
        public override void Head()
        {
            //do something
            person.Head = "A式頭";
        }

        public override void Body()
        {
            //do something
            person.Body = "A式身體";
        }

        public override void Leg()
        {
           //do something
            person.Leg = "A式腿";
        }
        public Person GetResult()
        {
            return person;
        }
    }
具體建造者類:ConcreteBuilderA
    //具體建造者類
    class ConcreteBuilderB:Builder
    {
        private Person person = new Person();

        public override void Head()
        {
            //do something
            person.Head = "B式頭";
        }

        public override void Body()
        {
            //do something
            person.Body = "B式身體";
        }

        public override void Leg()
        {
           //do something
            person.Leg = "B式腿";
        }
        public Person GetResult()
        {
            return person;
        }
具體建造者類:ConcreteBuilderB
    //產品類
    class Person
    {
        public Object Head { set; get; }
        public Object Body { set; get; }
        public Object Leg { set; get; }
    }
產品類:Person
    //指揮者類
    class Director
    {
        public void Construct(Builder builder)
        {
            builder.Head();
            builder.Body();
        }
    }
指揮者類:Director

執行:對象

        static void Main(string[] args)
        {
            Director director = new Director();
            ConcreteBuilderA a = new ConcreteBuilderA();
            director.Construct(a);

            Object p = a.GetResult();
        }

  上述執行代碼中,首先建立執行者類,再建立一個具體建造者類,而後由執行者類調用Construct方法去執行建造。而最後經過具體建造者類的GetResult方法得到了建造的結果。blog

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息