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
  • 相关阅读:
    Sql Server 2005中的架构(Schema)、用户(User)、角色(Role)和登录(Login)(三)
    安装Eclipse的Tomcat插件
    Datedif函数
    web.xml 中的listener、 filter、servlet 加载顺序及其详解(1)
    Sql Server 2005中的架构(Schema)、用户(User)、角色(Role)和登录(Login)一
    关于IIS6.0 发布Web服务的问题 Pete
    什么是Winsock
    RTTI
    Cstring转char、string、int等数据类型的方法
    C++静态成员函数小结
  • 原文地址:https://www.cnblogs.com/zlgan/p/12169145.html
Copyright © 2011-2022 走看看