《大话设计模式》--好菜每回味不同--建造者模式<Builder>(13)

When use?

如果你需要将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,即需要建造者模式,又叫生成器模式。

如果我们用了建造者模式,那么用户就只需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道。

B:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.

创建游戏中一个人物的UML:

abstract class PersonBuilder
    {
        protected Graphics g;
        protected Pen p;

        public PersonBuilder(Graphics g, Pen p)
        {
            this.g = g;
            this.p = p;
        }

        public abstract void BuildHead();
        public abstract void BuildBody();
        public abstract void BuildLeftArm();
        public abstract void BuildRightArm();
        public abstract void BuildLeftLeg();
        public abstract void BuildRightLeg();
    }

 

 class PersonFatBuilder:PersonBuilder
    {
        public PersonFatBuilder(Graphics g, Pen p)
            : base(g, p)
        { }

        public override void BuildHead()
        {
            g.DrawEllipse(p, 50, 20, 30, 30);
        }

        public override void BuildBody()
        {
            g.DrawEllipse(p, 60, 50, 10, 50);
        }

        public override void BuildLeftArm()
        {
            g.DrawLine(p, 60, 50, 40, 100);
        }

        public override void BuildRightArm()
        {
            g.DrawLine(p, 70, 50, 90, 100);
        }

        public override void BuildLeftLeg()
        {
            g.DrawLine(p, 60, 100, 45, 150);
        }

        public override void BuildRightLeg()
        {
            g.DrawLine(p, 70, 100, 85, 150);
        }
    }

 

class PersonThinBuilder:PersonBuilder
    {
        public PersonThinBuilder(Graphics g, Pen p)
            : base(g, p)
        { }

        public override void BuildHead()
        {
            g.DrawEllipse(p, 50, 20, 30, 30); 
        }

        public override void BuildBody()
        {
            g.DrawRectangle(p, 60, 50, 10, 50);
        }

        public override void BuildLeftArm()
        {
            g.DrawLine(p, 60, 50, 40, 100);
        }

        public override void BuildRightArm()
        {
            g.DrawLine(p, 70, 50, 90, 100);
        }

        public override void BuildLeftLeg()
        {
            g.DrawLine(p, 60, 100, 45, 150);
        }

        public override void BuildRightLeg()
        {
            g.DrawLine(p, 70, 100, 85, 150);
        }
    }

 

class PersonDirector
    {
        private PersonBuilder pb;

        public PersonDirector(PersonBuilder pb)
        {
            this.pb = pb;
        }

        public void CreatePerson()
        {
            pb.BuildHead();
            pb.BuildBody();
            pb.BuildLeftArm();
            pb.BuildRightArm();
            pb.BuildLeftLeg();
            pb.BuildRightLeg();
        }
    }

 

客户端代码:

            Pen p = new Pen(Color.Yellow);
            PersonThinBuilder ptb = new PersonThinBuilder(pictureBox1.CreateGraphics(), p);
            PersonDirector pd = new PersonDirector(ptb);
            pd.CreatePerson();
            PersonFatBuilder pfb = new PersonFatBuilder(pictureBox1.CreateGraphics(), p);
            PersonDirector pd1 = new PersonDirector(pfb);
            pd1.CreatePerson();

总结:建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值