• 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();
            }
        }
    
    
    }
  • 相关阅读:
    RE
    【LeetCode】198. House Robber
    【LeetCode】053. Maximum Subarray
    【LeetCode】152. Maximum Product Subarray
    【LeetCode】238.Product of Array Except Self
    【LeetCode】042 Trapping Rain Water
    【LeetCode】011 Container With Most Water
    【LeetCode】004. Median of Two Sorted Arrays
    【LeetCode】454 4Sum II
    【LeetCode】259 3Sum Smaller
  • 原文地址:https://www.cnblogs.com/annkiny/p/6219094.html
Copyright © 2020-2023  润新知