设计模式建造者模式

代码及解释如下:

 public static void BuilderPattern()
        {
            //我要买一个dell电脑
            ComputerVender v = new ComputerVender();
            Computer computerObj= v.GetComputer(ComputerBrand.DELL);

            Console.WriteLine(computerObj.ToString());

            //如果另外一个人想买联想电脑,只需告诉ComputerVender 品牌信息即可,其它地方无需修改
            
//由于每个产品的构造都一样,不同的只是各个部分的具体型号,所以构造产品的过程是一致的,
            
//而每个产品零部件的构造则是不相同的(比如我要AMD的CPU,你要Intel的CPU),这正是建造者模式
            
//的用武之地:为外界提供一致的产品构造过程,封装内部零部件的构造细节(外界不用关心)。
            
//其它应用场景:1,服装搭配.2,话费套餐 3,游戏角色等
        }


/// <summary>
    
/// 产品
    
/// </summary>
    public class Computer
    {
        public string Brand { getset; }

        public string CPU { getset; }

        public string Memory { getset; }

        public string Disk { getset; }

        public string Monitor { getset; }

        public override string ToString()
        {
            return string.Format("品牌:{0},CPU:{1}, 内存:{2},硬盘:{3},显示器:{4}",
                Brand, CPU, Memory,Monitor);
        }
    }

    /// <summary>
    
/// 建造者基类
    
/// </summary>
    public abstract class ComputerBuilder
    {
        private Computer mComputer;
        public Computer Product
        {
            get
            {
                return mComputer;
            }
        }

        public ComputerBuilder(string brand)
        {
            mComputer = new Computer() { Brand=brand};
        }

        public abstract void AddCPU();

        public abstract void AddMemory( );

        public abstract void AddDisk( );

        public abstract void AddMonitor( );

    }

    /// <summary>
    
/// 建造者具体类
    
/// </summary>
    public class DellComputerBuilder : ComputerBuilder
    {
        public DellComputerBuilder()
            : base("DELL")
        {

        }

        public override void AddCPU( )
        {
            Product.CPU = "AMD 2100";
        }

        public override void AddMemory( )
        {
            Product.Memory = "Kinston DDR3";
        }

        public override void AddDisk( )
        {
            Product.Memory = "希捷500G";
        }

        public override void AddMonitor( )
        {
            Product.Monitor = "三星显示器";
        }
    }

    public class LenovoComputerBuilder : ComputerBuilder
    {
        public LenovoComputerBuilder() : base("Lenovo") { 
        
        }

        public override void AddCPU( )
        {
            Product.CPU = "Intel i5";
        }

        public override void AddMemory( )
        {
            Product.Memory = "Kinston DDR3 4G";
        }

        public override void AddDisk( )
        {
            Product.Disk = "三星7500转 500G";
        }

        public override void AddMonitor( )
        {
            Product.Monitor = "LG 22英才LED显示器";
        }
    }

    public enum ComputerBrand
    {
        DELL,

        LENOVO
    }

    /// <summary>
    
/// 电脑零售商--Director角色
    
/// </summary>
    public class ComputerVender
    {
        private ComputerBuilder mBuilder;
        public Computer GetComputer(ComputerBrand brand)
        {
            switch (brand)
            {
                case ComputerBrand.DELL:
                    mBuilder = new DellComputerBuilder();
                    break;
                case ComputerBrand.LENOVO:
                    mBuilder = new LenovoComputerBuilder();
                    break;
                default:
                    throw new ArgumentException("没有此品牌的电脑");
            }

            mBuilder.AddCPU();
            mBuilder.AddMemory();
            mBuilder.AddDisk();
            mBuilder.AddMonitor();

            return mBuilder.Product;
        }

    } 

原文地址:https://www.cnblogs.com/imap/p/2616438.html