• 设计模式C#实现(七)——生成器模式


    生成器模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    UML类图:

    构成:

    1.Builder(接口/抽象类)定义了创建一个产品Product的各个部件的方法,返回创建好的产品。

    2.Director  调用Builder创建部件的方法,对产品的创建进行控制 

    3.ConcreteBuilder 实现/重写 Builder的方法,负责创建Product各个部件

    4.Product 被创建的对象

    以手机为例,在这里Builder使用抽象类提供了,提供了空的方法作为默认的部件创建方法和创建、返回产品两个方法,也可以定义为接口让具体类去实现

    abstract class Builder
        {
            public Phone phone { get; private set; }
            virtual public void createPhone() { phone = new Phone(); }
            virtual public void addCPU() { }
            virtual public void addMemory() { }
            virtual public void addScreen() { }
            virtual public Phone getPhone()
            {
                return phone;
            }
        }

    一个生成苹果手机的ConcreteBuilder

    class AppleBuilder : Builder
        {
             
            override public void addCPU()
            {
                phone.CPU = "A7";
            }
            override public void addMemory()
            {
                phone.Memory = "1GB";
            }
            override public void addScreen()
            {
                phone.Screen = "LG 5.5"";
            }
    
        }

    Director负责调用Builder

    class Director
        {
            public void createPhone(Builder builder)
            {
                builder.createPhone();
                builder.addCPU();
                builder.addMemory();
                builder.addScreen();
            }
        }

    要生成的产品Phone

      class Phone
        {
            public string CPU;
            public string Memory;
            public string Screen;
            public override string ToString()
            {
                return "CPU:"+CPU+"
    Memory:"+Memory+"
    Screen:"+Screen;
            }
        }

    执行代码

    效果:

    1.变更产品,只需定义一个新的ConcreteBuilder

    2.Director对产品的构造过程可以精细控制(每个部件创建的先后顺序?还有什么?)

  • 相关阅读:
    三级连动的下拉框(数据库版)吐血推荐
    行排菜单
    用AJAX制作天气预
    XmlHttp实战学习中....
    ASP+JS三级连动下拉框
    ASP连接11种数据库语法总结
    oa数据库设计
    RSS PUBData 把正常时间函数转成rss2.0的标准
    浮点数的表示和基本运算
    C#4.0新特性:可选参数,命名参数,Dynamic
  • 原文地址:https://www.cnblogs.com/castdream/p/4815364.html
Copyright © 2020-2023  润新知