zoukankan      html  css  js  c++  java
  • 设计模式--建造者模式

    namespace Builder
    {
        //产品
        public class Product
        {
            public string PartA { get; set; }
            public string PartB { get; set; }
            public string PartC { get; set; }
    
            public  override string ToString()
            {
                return PartA+" "+PartB+" "+PartC;
            }
    
        }
    
        //抽象创建者
        public abstract class Builder
        {
            public abstract void CreateA();
            public abstract void CreateB();
            public abstract void CreateC();
    
            protected Product product=new Product();
    
            public  Product GetProduct()
            {
                return product;
            }
        }
    
        //具体创建者
        public class Worker:Builder
        {
            public override void CreateA()
            {
                product.PartA="PartA";
            }
            public override void CreateB()
            {
                product.PartB="PartB";
            }
            public override void CreateC()
            {
                product.PartC="PartC";
            }
        }
    
        //Director 指挥创建过程
        public class Director
        {
            Builder builder;
            public Product Build()
            {
                builder.CreateA();
                builder.CreateB();
                builder.CreateC();
                return builder.GetProduct();
            }
            public Director( Builder builder)
            {
                this.builder=builder;
            }
        }
    
        public static class client
        {
            public static void Test()
            {
                Director director=new Director(new Worker());
                Product product=  director.Build();
                Console.WriteLine(product.ToString());
            }
        }
    }

    Director把建造的流程固化了,也可以不要这个director;直接交给客户端自由搭配

    namespace Builder2
    {
        //产品
        public class Product
        {
            public string PartA { get; set; }
            public string PartB { get; set; }
            public string PartC { get; set; }
    
            public  override string ToString()
            {
                return PartA+" "+PartB+" "+PartC;
            }
    
        }
    
        //抽象创建者
        public abstract class Builder
        {
            public abstract Builder CreateA(string str);
            public abstract Builder CreateB(string str);
            public abstract Builder CreateC(string str);
    
            protected Product product=new Product();
    
            public  Product GetProduct()
            {
                return product;
            }
        }
    
        //具体创建者
        public class Worker:Builder
        {
            public override Builder CreateA(string str)
            {
                product.PartA=str;
                return this;
            }
            public override Builder CreateB(string str)
            {
                product.PartB=str;
                 return this;
            }
            public override Builder CreateC(string str)
            {
                product.PartC=str;
                 return this;
            }
        }
    
        public static class Client
        {
            public static void Test()
            {
                Builder builder=new Worker();
                builder.CreateA("aa")
                .CreateB("bb")
                .CreateC("cc");
                Console.WriteLine(builder.GetProduct().ToString());
            }
        }
    }
     
    SQL Server
  • 相关阅读:
    MaltReport2:通用文档生成引擎
    PostgreSQL 10 如何使用 PgAdmin3
    Stackoverflow 珠玑:C#封装重试指定次数的功能
    C# 6 元组应用 Part 2:C# 也玩模式匹配
    C# 6 元组应用 Part 1:方便的字典工厂方法
    Stackoverflow 珠玑:用于分组的 LINQ 扩展方法
    Linux 下的 PostgreSQL 数据库+文件通用自动备份脚本
    让 Odoo POS 支持廉价小票打印机
    NopCommerce 根据手机浏览器和桌面浏览器切换 Theme
    为什么 C# 比 C++ 编译快那么多
  • 原文地址:https://www.cnblogs.com/zlgan/p/12169145.html
Copyright © 2011-2022 走看看