zoukankan      html  css  js  c++  java
  • c#设计模式——简单说(建造者模式)

    与其说是建造者模式,还不如通俗的说工厂生产模式。当然只是为了自己的理解和应用模式

    1、我们需要的是生成需要的组件  A,B……

    2、生产流水线通过产品的QA,通过QA的产品就是一个完成的产品,一个可以展示的产品。

    3、产品工程师,他给你生产制造的工艺文档,告诉你怎么去完成这个产品的组装

    4、出来的产品了。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 建造者模式
    {
        
        //生成的产品的车间
        public class Product
        {
            private IList<string> parts = new List<string>();
            //按顺序添加组件
            public void Add(string part)
            {
                parts.Add(part);
            }
            //安装组件
            public void Show()
            {
                Console.WriteLine("产品开始在组装……");
                foreach (var item in parts)
                {
                    Console.WriteLine("组件" + item + "已装好");
                }
                Console.WriteLine("产品完成。");
            }
        }
        //产品工程师
        public class Builder
        {
            private Product product = new Product();
            //A模块组装
            public void BuildPartA()
            {
                product.Add("手机主板+配件");
            }
            //B模块组装
            public void BuildPartB()
            {
                product.Add("手机外壳");
            }
            //获得的产品
            public Product GeProduct()
            {
                return product;
            }
            //组装成产品
            public void Construct()
            {
                BuildPartA();
                BuildPartB();
                product.Add("打包成盒");
            }
        }
    
        class Program
        {
            private static Builder builder;
            static void Main(string[] args)
            {
                builder = new Builder();
                builder.Construct();
                Product product = builder.GeProduct();
                product.Show();
    
                Console.Read();
            }
        }
    }

    看到这张图,是不是发现少了些东西。没错,少了标准流程的东西

     改进下

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 建造者模式
    {
        
        //生成的产品的车间
        public class Product
        {
            private IList<string> parts = new List<string>();
            //按顺序添加组件
            public void Add(string part)
            {
                parts.Add(part);
            }
            //安装组件
            public void Show()
            {
                Console.WriteLine("产品开始在组装……");
                foreach (var item in parts)
                {
                    Console.WriteLine("组件" + item + "已装好");
                }
                Console.WriteLine("产品完成。");
            }
        }
        //产品工程师
        public class Builder : PhoneBuilder
        {
            private Product product = new Product();
            //A模块组装
            public void BuildPartA()
            {
                product.Add("手机主板+配件");
            }
            //B模块组装
            public void BuildPartB()
            {
                product.Add("手机外壳");
            }
            //获得的产品
            public Product GeProduct()
            {
                return product;
            }
            //组装成产品
            public void Construct()
            {
                BuildPartA();
                BuildPartB();
                product.Add("打包成盒");
            }
        }
    
        //生成手机要的流程,不能偷工减料
        public abstract class PhoneBuilder
        {
            public abstract void BuildPartA();
            public abstract void BuildPartB();
            public abstract void GeProduct();
            public abstract void Construct();
        }
    
        class Program
        {
            private static Builder builder;
            static void Main(string[] args)
            {
                builder = new Builder();
                builder.Construct();
                Product product = builder.GeProduct();
                product.Show();
    
                Console.Read();
            }
        }
    
    
    }
  • 相关阅读:
    Active Url 激活URL
    Specified argument was out of the range of valid values.
    EnumHelp
    历史对像(版本对像)
    dom4j API 简介
    即时通讯软件openfire+spark+smack
    openfire插件入门学习
    Openfire本地化配置
    JSONObject与JSONArray的使用
    Android端服务器推送技术原理分析及XMPP的使用
  • 原文地址:https://www.cnblogs.com/annkiny/p/6219094.html
Copyright © 2011-2022 走看看