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();
            }
        }
    
    
    }
  • 相关阅读:
    4KB对齐
    小甲鱼PE详解之区块表(节表)和区块(节)(PE详解04)
    策略设计模式与c语言中的函数指针
    包装类类值传第
    java的 clone方法
    ubuntu中maven建的web项目不能将project facet设置为 dynamic web module 3.0
    maven 笔记
    eclipse中xml文件不能自动提示的解决办法
    oracle merge into 的例子
    oracle 常用sql
  • 原文地址:https://www.cnblogs.com/annkiny/p/6219094.html
Copyright © 2011-2022 走看看