创建型模式(六)建造者模式

介绍这个设计模式之前,我先说两个知识点。Is-a、Has-a。

Is-a 指一个类是另一个类的一种,是属于关系。

Has-a 指表示一个角色的一项责任。

一句话的概要

创建一个复杂的对象,让其由各部分子对象通过一定的步骤而组合而成。这就是建造者模式。

剧情

小明跟女神交往过程中,总是感觉进展缓慢。于是小明就决定用一个烛光晚餐的惊喜,来打动女神。

但是,小明就一个人,他白天要约女神出来。所以他准备雇佣一个人来进行烛光晚餐的准备。

剧情看着很简单,但是我们来分析一下,怎么构造这种场景。

首先,必要的人物就是小明和雇佣的人。如果使用建造者模式的话。可以把小明看作指挥者,然后雇佣的小A(起个名字,方便些)是建造者。

然后,我们要定义具体有什么工作。和烛光晚餐的具备的东西。

最后,我们由小明来指挥,雇佣的人进行干活。

那么我们接下来用建造者模式,来构造此剧情。

任务一:创建烛光晚餐

首先创建烛光晚餐这个类,一共两个方法,准备和开始吃。

public class Supper
    {
        IList<string> list = new List<string>();
        public void Add(string name)
        {
            list.Add(name);
        }
        public void GetSupper() {
            foreach (string name in list)
            {
                Console.WriteLine(name+"。完毕");
            }
            Console.WriteLine("可以享用晚餐了");
        }
    }

准备步骤用一个List来存放,开始吃会先循环这个List,然后进行享用。

任务二:创建建造者小A

首先把建造者的任务,抽象为类。然后把小A继承这个抽象类,来实现具体的操作。

public abstract class Hire
    {
        //蜡烛
        public abstract void Candle();
        //牛排
        public abstract void Steak();
        //香槟
        public abstract void Champagne();
        //烛光晚餐
        public abstract Supper GetSupper();
    }
    public class SomeA : Hire
    {
        Supper Su = new Supper();
        public override void Candle()
        {
            Su.Add("购买蜡烛");
        }
        public override void Champagne()
        {
            Su.Add("制作牛排");
        }
        public override void Steak()
        {
            Su.Add("拿出香槟");
        }
        public override Supper GetSupper()
        {
            return Su;
        }
    }

每执行一个步骤,都会向烛光晚餐添加一条信息。代码很简单,没啥说的。

任务三:创建小明同学

小明同学有两个方法,第一指挥小A准备晚餐。第二跟女神吃完饭。

public class SomeMing
    {
        public void Read(Hire hi)
        {
            hi.Candle();
            hi.Champagne();
            hi.Steak();
        }
        public void Go(Hire hi)
        {
            Supper sup = hi.GetSupper();
            sup.GetSupper();
        }
    }

很简单,没啥说的。

任务四:小明约女神吃饭

小明同学约女神,然后打电话给小A让他准备晚餐。然后去吃烛光晚餐。

static void Main(string[] args)
        {
            Console.WriteLine("小明约出女神");
            Console.WriteLine("小明开始让小A准备晚餐");
            SomeMing m = new SomeMing();
            Hire hi = new SomeA();
            m.Read(hi);
            Console.WriteLine("晚餐准备完毕");
            m.Go(hi);
            Console.ReadLine();

        }

执行结果

创建型模式(六)建造者模式_第1张图片

总结

建造者模式,创建烛光晚餐这种复杂对象,会分为几个小责任,这样会拼接成一个复杂的对象。而且指挥者和建造者也进行了解耦。

我如果添加建造者,只要实现抽象类。则指挥者和现有建造者不用进行任何改动。

常用场景:需要构建一批过程相同但构造过程非常复杂的产品。

选择关键点:产品的构造过程是否相同。

最后说几句

至此,创建型模式的6个设计模式,介绍完毕。不管你们懂不懂,反正我懂了。

创建型设计模式,就是用来创建对象的模式。并且抽象了实例化的过程。

所有的创建型设计模式都有两个共同点:

一、它们都将系统使用那些具体类封装起来。

二、它们隐藏了这些类的实例是如何被创建和组成。

设计模式是可以组合使用的,比如说抽象工厂中,带着单例模式。都是可以的。

接下来,我们介绍结构型的7种设计模式。我们的主人公小明同学,到底跟女神还会发生什么事情呢?我们接着往下看~

By~ 下一节:结构型模式(一)适配器模式

 

你可能感兴趣的:(创建型模式(六)建造者模式)