zoukankan      html  css  js  c++  java
  • 大话设计模式学习之建造者模式

    建造者模式(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("小人产生成功");

            }

  • 相关阅读:
    java 自定义异常输出信息(使用构造器)
    idea 项目java版本选项位置
    编译、安装rdesktop 1.8.3
    ubuntu下编译源码 make 出现 make: 'Makefile' is up to date.
    ubuntu 图形化界面 gui 桌面版 root登录 sorry,that didn't work.please try again! 抱歉,认证失败。请重试
    MIUI 10 已连接 但无法访问互联网 的解决方案
    idea中 和outline相似的功能
    idea web项目debug模式实时更新按钮不生效原因
    javaweb学习总结二(静态导入、自动拆装箱、增强for与可变参数)
    javaweb学习总结一(eclipse常用快捷键、debug调试以及junit测试框架)
  • 原文地址:https://www.cnblogs.com/luodao1991/p/3063107.html
Copyright © 2011-2022 走看看