• 好好学习设计模式之二:建造者模式


    建造者模式,就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以如果需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。具体的UML图例如下:

    当然,上面的已经做了详细的注释,其实,对于产品,主要是先将所有的产品的公共行为抽象为一个方法出来,然后再在Builder中进行具体的构建行为,当然了,产品是怎么样的,还得需要Director的决定。具体代码如下:

    Product类

    using System;

    using System.Collections.Generic;



    namespace BuilderApplication

    {

    class Product

    {

    List
    <string> parts = new List<string>();



    public void Add(string part)

    {

    parts.Add(part);

    }



    public void Show()

    {

    Console.WriteLine(
    "\n产品创建 ---- ");

    foreach (string part in parts)

    {

    Console.WriteLine(part);

    }

    }

    }

    }

    Builder类:

     

    namespace BuilderApplication

    {

    abstract class Builder

    {

    public abstract void BuildPartA();

    public abstract void BuildPartB();

    public abstract Product GetResult();

    }

    }

    ConcreteBuilder1类:

     

    namespace BuilderApplication

    {

    class ConcreteBuilder1:Builder

    {

    private Product product = new Product();



    public override void BuildPartA()

    {

    product.Add(
    "部件A");

    }



    public override void BuildPartB()

    {

    product.Add(
    "部件B");

    }



    public override Product GetResult()

    {

    return product;

    }

    }

    }

     

    ConcreteBuilder2类:

     

    namespace BuilderApplication

    {

    class ConcreteBuilder2:Builder

    {

    Product product
    = new Product();



    public override void BuildPartA()

    {

    product.Add(
    "部件X");

    }



    public override void BuildPartB()

    {

    product.Add(
    "部件Y");

    }



    public override Product GetResult()

    {

    return product;

    }

    }

    }

     

    最后就是指挥官来进行创建产品了:

    Director类:

     

    namespace BuilderApplication

    {

    class Director

    {

    public void Construct(Builder builder)

    {

    builder.BuildPartA();

    builder.BuildPartB();

    }

    }

    }
  • 相关阅读:
    git 远程仓库 and 分支管理
    oracle 导入导出dmp
    sql if else 用法
    设置session超时的三种方式
    eclipse定制工具栏,修改工具栏
    cxf实例异常
    js 表格插入指定行
    iframe 调用父页面元素
    iframe页面刷新
    frame 和 iframe
  • 原文地址:https://www.cnblogs.com/scy251147/p/2062123.html
Copyright © 2020-2023  润新知