创建者模式

创建者模式:流程固定,细节可以自由来定

组装电脑的固定部件有以下几类,这固定的几大类(可以看作是流程固定的),但是里面的细节呢?CPU你可以用INTEL或AMD。就是说细节可变。

CPU:

硬盘:

主板:

显示器:

机箱:

鼠标键盘:

 

创建者模式就是要表达这个意思,解决这种问题。

这里面我们先来梳理一下装机的流程

1、选择零件(public class 零件

2、标准化技术流程(public interface 流程)(先做什么,后做什么,你要学习相关技术。步骤是什么等)

3、生产出产品(public class 组装 : 流程)(这里我可以选择在标准内做点什么,比如我帮CPU的工作参数调整,机箱贴点纸。等

4、出库(public class 指导者

 

用属性来做)代码呢?如何实现

    class Program
    {

        /// <summary>
        /// 如何使用这些东西呢
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {

            零件 l = new 零件();
            l.CPU = "Intel";
            l.磁盘 = "希捷";
            l.机箱 = "大水牛";
            l.内存 = "金士顿";
            l.鼠标键盘 = "逻辑";
            l.显示器 = "三星";
            l.主板 = "华硕";

            组装 z = new 组装(l);

            指导者 d = new 指导者();

            d.Build(z);
        }

    }



    /// <summary>
    /// 用属性来做
    /// </summary>
    public class 零件
    {
        public string CPU { get; set; }
        public string 主板 { get; set; }
        public string 显示器 { get; set; }
        public string 机箱 { get; set; }
        public string 磁盘 { get; set; }
        public string 内存 { get; set; }
        public string 鼠标键盘 { get; set; }
    }

    public class 组装 : 流程
    {
        零件 t零件;
        public 组装(零件 _零件)
        {
            t零件 = _零件;
        }

        public void 第一步()
        {
            Console.WriteLine("第一步-----------------------------------------------");
            Console.WriteLine(t零件.机箱);
            Console.WriteLine(t零件.鼠标键盘);
            Console.WriteLine(t零件.显示器);
        }

        public void 第二步()
        {
            Console.WriteLine("第二步-----------------------------------------------");
            Console.WriteLine(t零件.主板);
        }

        public void 第三步()
        {
            Console.WriteLine("第三步-----------------------------------------------");
            Console.WriteLine(t零件.CPU);
            Console.WriteLine(t零件.内存);
            Console.WriteLine(t零件.磁盘);
        }
    }


    /// <summary> 
    /// 指导者 
    /// </summary> 
    public class 指导者
    {
        public void Build(流程 builder)
        {
            builder.第一步();
            builder.第二步();
            builder.第三步();
        }
    }

    /// <summary> 
    /// 制定 需要 的步骤
    /// </summary> 
    public interface 流程
    {
        void 第一步();
        void 第二步();
        void 第三步();
    }

用方法来做)代码呢?如何实现(用方法来做的目的是比属性更灵活,因为我可以重写方法(override)

    class Program
    {

        /// <summary>
        /// 如何使用这些东西呢
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {

            组装1 z = new 组装1();

            指导者 d = new 指导者();

            d.Build(z);
        }

    }

    /// <summary> 
    /// 指导者 
    /// </summary> 
    public class 指导者
    {
        public void Build(流程 builder)
        {
            builder.第一步();
            builder.第二步();
            builder.第三步();
        }
    }

    /// <summary> 
    /// 制定 需要 的步骤
    /// </summary> 
    public interface 流程
    {
        void 第一步();
        void 第二步();
        void 第三步();
    }


    /// <summary>
    /// 装机 工作
    /// </summary>
    public abstract class 零件1
    {
        abstract public void CPU3();
        abstract public void 主板2();
        abstract public void 显示器6();
        abstract public void 机箱1();
        abstract public void 磁盘5();
        abstract public void 内存4();
        abstract public void 鼠标键盘7();
    }

    /// <summary>
    /// 机器 工作流程
    /// </summary>
    public class 组装1 : 零件1, 流程
    {

        public 组装1()
        {

        }

        public void 第一步()
        {
            Console.WriteLine("第一步-----------------------------------------------");
            ///我可以在这里自定我需要的东西
            机箱1();
            显示器6();
            显示器6();
        }

        public void 第二步()
        {
            Console.WriteLine("第二步-----------------------------------------------");
            主板2();
        }

        public void 第三步()
        {
            Console.WriteLine("第三步-----------------------------------------------");
            CPU3();
            内存4();
            磁盘5();
        }

        public override void CPU3()
        {
            Console.WriteLine("CPU");
        }

        public override void 主板2()
        {
            Console.WriteLine("主板2");
        }

        public override void 显示器6()
        {
            Console.WriteLine("显示器6");
        }

        public override void 机箱1()
        {
            Console.WriteLine("机箱1");
        }

        public override void 磁盘5()
        {
            Console.WriteLine("磁盘5");
        }

        public override void 内存4()
        {
            Console.WriteLine("内存4");
        }

        public override void 鼠标键盘7()
        {
            Console.WriteLine("鼠标键盘7");
        }
    }

 

转载于:https://www.cnblogs.com/lystory/p/5103087.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值