建造者模式的C#实现

来源:互联网 发布:国际数据流量怎么开通 编辑:程序博客网 时间:2024/05/18 18:19

借鉴各路大神,就不做链接了

class BuilderPattern    {        /// <summary>        /// 产品类        /// </summary>        public class Product        {            public string need;            public void IntroduceSelf()            {                Console.WriteLine(need);                Console.WriteLine("complete");            }        }        /// <summary>        /// 生产者类        /// </summary>        public abstract class Builder        {            public abstract void Method1();            public abstract void Method2();            public abstract Product GetProduct();        }        /// <summary>        /// 会生产某种产品的员工        /// </summary>        public class ConcreteBuilder : Builder        {            Product product = new Product();            public override Product GetProduct()            {                return product;            }            public override void Method1()            {                product.need += "Method1";            }            public override void Method2()            {                product.need += "Method2";            }        }        //调用        //BuilderPattern.ConcreteBuilder concreteBuilder = new BuilderPattern.ConcreteBuilder();        //concreteBuilder.Method1();//假设这里有一百个过程是不是要写一百次?        //concreteBuilder.Method2();        //BuilderPattern.Product product = concreteBuilder.GetProduct();        //product.IntroduceSelf();        /// <summary>        /// 管理Builder,厂商老板安排Builder员工生产某个产品        /// </summary>        public class Director        {            public Product GetProduct()            {                ConcreteBuilder concreteBuilder = new ConcreteBuilder();                concreteBuilder.Method1();                concreteBuilder.Method2();                Product product = concreteBuilder.GetProduct();                return product;            }        }        //调用        //BuilderPattern.Director director = new BuilderPattern.Director();        //BuilderPattern.Product product = director.GetProduct();        //product.IntroduceSelf();        //然后你可以给director.GetProduct();带参数Type type 达到需要什么类型的产品就生产出什么类型的产品        /// <summary>        /// 生产另一种类型的同种产品,比如组装电脑时不同的CPU 硬盘等        /// </summary>        public class ConcreteBuilder2 : Builder        {            Product product = new Product();            public override Product GetProduct()            {                return product;            }            public override void Method1()            {                product.need += "NewMethod1";            }            public override void Method2()            {                product.need += "NewMethod2";            }        }        public class NewDirector        {            public Product GetProduct(string str)//先用字符串表示            {                Product product;                switch (str)                {                    case "1":                        ConcreteBuilder concreteBuilder1 = new ConcreteBuilder();                        concreteBuilder1.Method1();                        concreteBuilder1.Method2();                        product = concreteBuilder1.GetProduct();                        break;                    case "2":                        ConcreteBuilder2 concreteBuilder2 = new ConcreteBuilder2();                        concreteBuilder2.Method1();                        concreteBuilder2.Method2();                        product = concreteBuilder2.GetProduct();                        break;                    default:                        ConcreteBuilder concreteBuilder = new ConcreteBuilder();                        concreteBuilder.Method1();                        concreteBuilder.Method2();                        product = concreteBuilder.GetProduct();                        break;                }                return product;            }        }        //调用        //BuilderPattern.NewDirector director = new BuilderPattern.NewDirector();        //BuilderPattern.Product product = director.GetProduct("2");        //product.IntroduceSelf();    }
原创粉丝点击