zoukankan      html  css  js  c++  java
  • 好好学习设计模式之二:建造者模式

    建造者模式,就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以如果需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。具体的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();

    }

    }

    }
  • 相关阅读:
    如何添加mysql到环境变量
    SQLyog客户端无法连接MySQL服务器
    linux下插入的mysql数据乱码问题及第三方工具显示乱码问题
    mysql-5.7.10产生的日志时间与系统时间不一致
    linux—文件目录简单介绍
    python编程中的if __name__ == 'main' 的作用和原理
    Windows下Python版本的切换
    python—第三库的安装方法
    阿里云ubuntu16.04安装beef
    xss利用-beef攻击-演示
  • 原文地址:https://www.cnblogs.com/scy251147/p/2062123.html
Copyright © 2011-2022 走看看