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();

    }

    }

    }
  • 相关阅读:
    Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!
    WebSocket 网页聊天室的实现(服务器端:.net + windows服务,前端:Html5)
    数据科学求职准备
    c#使用MethodInvoker解决跨线程访问控件
    zedboard--Opencv移植和zedboard测试(十一)
    浅谈C++调用C#的DLL程序方法
    linux内核--进程空间(二)
    Windows 下如何安装配置Snort视频教程
    十分钟搭建自己的hadoop2/CDH4集群
    MFC调用c#的dll
  • 原文地址:https://www.cnblogs.com/scy251147/p/2062123.html
Copyright © 2011-2022 走看看