• C# 设计模式-建造者模式


    一.介绍  

      建造者模式(Singleton Pattern)。属于创建型模式。将一个复杂对象的创建和它的表示分离,使得同样的构建过程可以创建不同的表示。

    二.实现

      举个例子,客户去买电脑,都是和电脑店的老板直接沟通的,然后老板再安排装机人员去安装电脑,最后安装完成就可以出货。这个流程符合用建造者模式去实现,安装电脑的过程都是一样的,而用同样的流程可以安装出不同的电脑。

    public static void Main(string[] args)
    {
        Boss boss = new Boss();
        boss.SetBuilder(new CommonBuilder());   //同样的构建过程不同的表示
        boss.Delivery();    //出货,一般电脑
    
        boss.SetBuilder(new SeniorBuilder());
        boss.Delivery();    //出货,高端电脑
    }
    
    /// <summary>
    /// 建造者模式中的指挥者
    /// </summary>
    public class Boss
    {
        public Builder builder { get; set; }
        public void SetBuilder(Builder builder)
        {
            this.builder = builder;
        }
    
        /// <summary>
        /// 提货
        /// </summary>
        public void Delivery()
        {
            Console.WriteLine(builder.GetComputer().ToString());
        }
    }
    
    /// <summary>
    /// 抽象建造者 
    /// </summary>
    public abstract class Builder
    {
        public abstract string BuildCPU();
        public abstract string BuildMemory();
        public abstract string BuildHD();
    
        /// <summary>
        /// 构建过程一般是固定的,当然也可以在子类override
        /// </summary>
        /// <returns></returns>
        public virtual Computer GetComputer()
        {
            return new Computer
            {
                CPU = BuildCPU(),
                Memory = BuildMemory(),
                HD = BuildHD()
            };
        }
    }
        
    /// <summary>
    /// 具体建造者 一般电脑
    /// </summary>
    public class CommonBuilder : Builder
    {
        public override string BuildCPU()
        {
            return "Intel 5";
        }
    
        public override string BuildHD()
        {
            return "希捷 5400转 500G";
        }
    
        public override string BuildMemory()
        {
            return "金士顿 ddr3 4G";
        }
    
        public override Computer GetComputer()
        {
            return new Computer
            {
                CPU = BuildCPU(),
                Memory = BuildMemory(),
                HD = BuildHD()
            };
        }
    }
    
    /// <summary>
    /// 具体建造者 高端电脑
    /// </summary>
    public class SeniorBuilder : Builder
    {
        public override string BuildCPU()
        {
            return "Intel 7";
        }
    
        public override string BuildHD()
        {
            return "SSD 1T";
        }
    
        public override string BuildMemory()
        {
            return "金士顿 ddr4 16G";
        }
    
        public override Computer GetComputer()
        {
            return new Computer
            {
                CPU = BuildCPU(),
                Memory = BuildMemory(),
                HD = BuildHD()
            };
        }
    }
    
    /// <summary>
    /// 构建的产品
    /// </summary>
    public class Computer
    {
        public string CPU { get; set; }
        public string Memory { get; set; }
        public string HD { get; set; }
    
        public override string ToString()
        {
            var newLine = System.Environment.NewLine;
            return $"CPU:{CPU}{newLine}内存:{Memory}{newLine}硬盘:{HD}{newLine}";
        }
    }

    三.总结

      建造者模式使得建造代码和表示代码分离,可以使客户端不必知道产品组成的细节,从而降低客户端和产品之间的耦合度。

      参考:https://www.cnblogs.com/guyun/p/6183795.html

  • 相关阅读:
    《计算机图形学》学习笔记 0
    最全面的百度地图JavaScript离线版开发
    android 中文api
    SQL Compare数据库比较工具 完全破解+使用教程
    Android系统自带样式(android:theme)
    android studio 导入第三方库的记录
    web在线打印,打印阅览,打印维护,打印设计
    Oracle如何实现跨库查询
    WPF自适应窗体实现小结
    【转】WCF OpenTimeout, CloseTimeout, SendTimeout, ReceiveTimeout
  • 原文地址:https://www.cnblogs.com/shadoll/p/14251855.html
Copyright © 2020-2023  润新知