4.建造者模式(Builder Pattern)

本文通过实例介绍了建造者模式的应用,以创建水杯为例,展示了如何利用建造者模式将复杂的组装过程与具体产品的表示分离,使得创建不同类型的水杯变得简单。在代码示例中,通过Director类指导Builder类完成水杯各部分的构建,从而实现定制化创建运动水杯。若需创建其他类型的水杯,只需继承Builder并实现相应构建方法。
摘要由CSDN通过智能技术生成

建造者模式

在日常生活中有这样一个场景,我想要一台电脑,但是我又不想要自己买配件组装,于是找到一个店铺把找到满意的电脑下单,商家在收到我的订单之后,开始安排技术人员组装,组装好之后再把电脑寄过来。

对于一台电脑来说,里面包含CPU、主板、显卡、内存、硬盘、电源、机箱等等配置,可以把电脑当成一个复杂的对象,CPU,主板等电脑配件,又有很多种选择,但是组装电脑的过程基本是一样的,这时候就可以用建造者模式实现这一过程。

意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

在这里插入图片描述
我们来已创建一个水杯举例子,代码如下。

using System;

namespace _04_Builder
{
	/// <summary>
    /// 建造者
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            //小明要制作一个运动水杯
            Builder b1 = new SportCupBuilder();
            Director director = new Director(b1);
            director.Create();
            
            Cup cup = new Cup();
            cup.Drink();

            Console.ReadKey();
        }
    }
    public class Director
    {
        Builder b = null;
        public Director(Builder builder)
        {
            b = builder;
        }
        public void Create()
        {
            b.BuildString();
            b.BuildCap();
            b.BuildBody();
        }
    }
    //我想定制个水杯
    public abstract class Builder
    {
        public abstract void BuildString();
        public abstract void BuildCap();
        public abstract void BuildBody();
    }
    /// <summary>
    /// 运动水杯
    /// </summary>
    public class SportCupBuilder : Builder
    {
        public override void BuildString()
        {
            Console.WriteLine("经历一番工作把杯子绳做好了");
        }
        public override void BuildCap()
        {
            Console.WriteLine("杯盖做好了");
        }
        public override void BuildBody()
        {
            Console.WriteLine("杯子主体做好了");
        }
    }

    //这是我们要制作的水杯
    public class Cup
    {
        private string myString;//绳子
        private string body;  //主体
        private string cap;  //杯盖

        public string MyString
        {
            get { return myString; }
            set { myString = value; }
        }
        public string Body
        {
            get { return body; }
            set { body = value; }
        }
        public string Cap
        {
            get { return cap; }
            set { cap = value; }
        }
        public void Drink()
        {
            Console.WriteLine("喝水。。。吨吨吨");
        }
    }
}

如果说需要在创建另外的一种水杯,同样是又杯绳,杯盖,杯体组成的话,就可以仿照SportCupBuilder方法在写一个方法继承自Builder即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李公子lm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值