大话设计模式学习之建造者模式

建造者模式(Builder)

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

UML图

 

 

1、首先我们创建一个抽象类Builder,该类主要是为创建一个Product对象的各个部件指定的抽象接口。

abstract class PersonBuilder

    {

        protected Graphics _g;

        protected Pen _p;

        public PersonBuilder(Graphics g, Pen p)

        {

            this._g = g;

            this._p = p;

        }

        //虚方法 对象的构建方法

        public abstract void BuilderHead();

        public abstract void BuilderBody();

        public abstract void BuilderArmRight();

        public abstract void BuilderArmLeft();

        public abstract void BuilderLegRight();

        public abstract void BuilderLegLeft();

}

2、具体创建者类,继承于基类PersonBuilder,实现PersonBuilder接口,构造函数和装配各个部件。

class PersonThinBuilder:PersonBuilder

    {

        public PersonThinBuilder(Graphics g, Pen p)

            : base(g, p)

        {

 

        }

        public override void BuilderHead()

        {

            _g.DrawEllipse(_p, 50, 20, 30, 30);

        }

        public override void BuilderBody()

        {

            _g.DrawRectangle(_p, 60, 50, 10, 50);

        }

        public override void BuilderArmLeft()

        {

            _g.DrawLine(_p, 60, 50, 40, 100);

        }

        public override void BuilderArmRight()

        {

            _g.DrawLine(_p, 70, 50, 90, 100);

        }

        public override void BuilderLegLeft()

        {

            _g.DrawLine(_p, 60, 100, 45, 150);

        }

        public override void BuilderLegRight()

        {

            _g.DrawLine(_p, 70, 100, 85, 150);

        }

    }

class PersonFatBuilder:PersonBuilder

{

  ………

}

3、PersonDirector类为指挥类,该类指挥具体使用哪一个PersonBuilder接口实例化的得到的创建者对象。

  //指挥类(Director),该类主要用来控制建造过程,

  //指示要建造哪个具体的建造对象,也用它来隔离用户与建造过程的关联

class PersonDirector

    {

        private PersonBuilder _pb;

        public PersonDirector(PersonBuilder pb)

        {

            this._pb = pb;

        }

        //根据用户的选择建造对应的建造者对象

        public void CreatePerson()

        {

            _pb.BuilderHead();

            _pb.BuilderBody();

            _pb.BuilderArmLeft();

            _pb.BuilderArmRight();

            _pb.BuilderLegLeft();

            _pb.BuilderLegRight();

        }

    }

4、客户端代码实现:

try

            {

                Graphics g = pictureBox1.CreateGraphics();//创建了一个画布

                Pen p = new Pen(Color.Red);

                //实例化了一个小人建造者对象

                PersonThinBuilder thinPerson = new PersonThinBuilder(g, p);

                //传入一个小人建造者对象给建造者对象控制器

                PersonDirector perDirector = new PersonDirector(thinPerson);

                //直接调用了产生对象的具体实例方法

                perDirector.CreatePerson();

            }

            catch (Exception ex)

            {

               

                MessageBox.Show(ex.Message);

            }

            MessageBox.Show("小人产生成功");

        }

 

posted @ 2013-05-06 16:54  罗导  阅读(140)  评论(0编辑  收藏  举报