建造者模式

建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(过程是稳定的)。

从建造者模式的定义来看,肯定是一头雾水,说的都是什么跟什么呀!举个小例来理解下:当我们来实现一个画画的功能,要求画瘦的人和胖的人。画的过程是稳定的,即:头、胳膊、身体、腿都是必须的。而画的具体实现是不一样的,例如:头大、肚子大、腿长等。这时再去理解建造者模式的定义就简单多了。

 

UML图:

 

Builder抽象类中定义各个部分的方法的抽象方法(例:定义了画胳膊、画头、画腿等方法)。
ConcreteBuilder类是各种不一样具体表示,它具体实现了Builder中的方法,并且返回一个结果。(例:实现了具体画怎样的头、胳膊、腿等,并返回构造的这个人)
product类是具体产品,即:要建造的产品。例:头、胳膊、腿等都是要建造人

 

代码:

 

复制代码
    //抽象建造者类
    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方法获得了建造的结果。

 

posted @   武沛齐  阅读(819)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示