zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    EBS R12.2.0启动时报"httpd.pid: Permission denied"错误
    MSSQL 2012 拒绝了对对象 'extended_properties' (数据库 'mssqlsystemresource',架构 'sys')的 SELECT 权限
    EBS R12.2 创建应用层的启动和关闭脚本
    EBS R12.2应用层启动脚本的执行过程
    EBS R12.2应用层关闭脚本的执行过程
    Linux卸载NAS磁盘,报device is busy
    linux上创建PV/VG/LV
    RW-50004 While Running adrunfmw during EBS 12.2 Installation
    .net(C#)中this关键字
    Javascript的this用法及jQuery中$this和$(this)的区别
  • 原文地址:https://www.cnblogs.com/shadoll/p/14251855.html
Copyright © 2011-2022 走看看