前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之建造者模式

设计模式之建造者模式

作者头像
宿春磊Charles
发布2022-03-29 10:05:19
2040
发布2022-03-29 10:05:19
举报
文章被收录于专栏:DotNet 致知

这节讲建造者模式(Builder Pattern)。

有些情况下,一个大类需要依赖另外一些小类共同完成一个需求,就好像一个完整的手机需要CPU,屏幕等小零件组成。

建造者模式就用来处理这个组成过程,它的定义为:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。

建造者模式由两个类组成:建造类和指挥类,建造类负责提供具体建造方法,指挥类负责调用建造类中的方法完成实例的创建。下面看一个完整的代码:

代码语言:javascript
复制
//最终产品
class Mate
{
    public string CPU { get; set; }
    public string Screen { get; set; }
    public string System { get; set; }

    public void LoadCPU(string cpu)
    {
        this.CPU = cpu;
    }
    
    public void LoadScreen(string scr)
    {
        this.Screen = scr;
    }

    public void LoadSystem(string sys)
    {
        this.System = sys;
    }

    public override string ToString ()
    {
        return $"Mate Stats:\n{CPU}\n{Screen}\n{System}";
    }
}

//抽象建造者
abstract class ABuilder
{
    protected Mate mate = new Mate ();

    public abstract void BuildCPU ();
    public abstract void BuildScreen ();
    public abstract void BuildSystem ();

    public Mate Products () => mate;

}

//具体建造者
class BuilderMate : ABuilder
{
    public override void BuildCPU ()
    {
        mate.LoadCPU ("CPU--就位");
    }

    public override void BuildScreen ()
    {
        mate.LoadScreen ("屏幕--就位");
    }

    public override void BuildSystem ()
    {
        mate.LoadSystem ("系统--就位");
    }
}

//指挥者
class Commander
{
    ABuilder bm = null;
    public Commander (ABuilder bm)
    {
        this.bm = bm;
    }

    //组装,出品
    public Mate construct ()
    {
        bm.BuildCPU ();
        bm.BuildScreen ();
        bm.BuildSystem ();
        return bm.Products ();
    }
}

在主方法中建造对象:

代码语言:javascript
复制
ABuilder b = new BuilderMate ();
Commander comm = new Commander (b);
Mate m= comm.construct ();
Console.WriteLine (m.ToString ());

建造者模式的优点是封装性好,构建和表示分离。扩展性好,各个具体的建造者相互独立,有利于系统的解耦。客户端不必知道产品内部组成的细节,建造者可以对创建过程逐步细化,而不对其它模块产生任何影响,便于控制细节风险。

当然,建造者模式的缺点也是显而易见的,每个建造者类,只能服务这一种生产模式,另外如果产品自身发生变化,建造者类也要跟着做变化,后期的维护成本高。

建造者模式尽管跟共产模式都是用来创建对象,但建造者模式注重组装,而工厂模式注重创建。这两者可以结合起来使用,使用工厂模式创建零部件,使用建造者模式组装最后的产品。

本节到此结束...

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet 致知 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档