首页 / C# / C#设计模式(5)-建造者模式
C#设计模式(5)-建造者模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#设计模式(5)-建造者模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4193字,纯文字阅读大概需要6分钟。
内容图文
引言
上一篇介绍了设计模式中的抽象工厂模式-C#设计模式(3)-抽象工厂模式,本篇将介绍建造者模式;
建造者模式简介
建造者模式 是将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。
在软件系统中,有时候会面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂的对象的各个部分可能面临着剧烈的变化,但是把他们组合在一起的算法很稳定。提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求的改变而改变。
实例场景
对于软件公司来讲,公司有研发人员和非研发人员(包括行政人员、管理人员等),每次入职新人,公司的IT人员就需要给新员工配一台电脑,但不同员工需要不同的配置的电脑,研发人员需要配置较高一点的电脑,行政人员需要的配置要求就没那么高;当然需要的配置可能很多,如安装公司用来游戏比赛时用的电脑、UE工程师使用的电脑、做视频用等等需要的配置可能都一样;这里我们仅以研发用电脑、办公用电脑为例;
但无论配置高低都需要给入职人员配置一台新电脑;下面我们用该场景讲解一下建造者模式;
实例代码
类图
建造者
建造者抽象类,这里讲安装电脑的过程标准化
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
namespace
BuilderPattern
{
///
<summary>
///
抽象安装电脑过程
///
</summary>
public
abstract
class
ComputerBuilder
{
///
<summary>
///
安装内存条
///
</summary>
public
abstract
void
SetupMemory();
///
<summary>
///
安装硬盘
///
</summary>
public
abstract
void
SetupHarddisk();
///
<summary>
///
安装操作系统
///
</summary>
public
abstract
void
SetupOperatingSystem();
//
安装电脑还需要其它很多步骤,如安装CPU、主板等等,这里不全部列举
}
}
如果安装研发人员使用的电脑
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
namespace
BuilderPattern
{
///
<summary>
///
安装研发人员使用电脑
///
</summary>
public
class
DevelopmentComputerBuilder:ComputerBuilder
{
///
<summary>
///
安装内存
///
</summary>
public
override
void
SetupMemory()
{
Console.WriteLine(
"
安装一个12G内存条(开发机内存需要配置大一点)
"
);
}
///
<summary>
///
安装硬盘
///
</summary>
public
override
void
SetupHarddisk()
{
Console.WriteLine(
"
安装一个1T硬盘
"
);
}
///
<summary>
///
安装操作系统
///
</summary>
public
override
void
SetupOperatingSystem()
{
Console.WriteLine(
"
安装WIN7系统(开发机需要安装各种开发工具,win7系统较稳定)
"
);
}
}
}
如果安装普通办公使用的电脑
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
namespace
BuilderPattern
{
///
<summary>
///
安装普通办公电脑
///
</summary>
public
class
OfficeComputerBuilder:ComputerBuilder
{
///
<summary>
///
安装内存
///
</summary>
public
override
void
SetupMemory()
{
Console.WriteLine(
"
安装一个4G内存条
"
);
}
///
<summary>
///
安装硬盘
///
</summary>
public
override
void
SetupHarddisk()
{
Console.WriteLine(
"
安装500G硬盘
"
);
}
///
<summary>
///
安装操作系统
///
</summary>
public
override
void
SetupOperatingSystem()
{
Console.WriteLine(
"
安装WIN10系统
"
);
}
}
}
当然需要的配置可能很多,如安装公司用来游戏比赛时用的电脑、UE工程师使用的电脑、做视频用等等需要的配置可能都一样;这里不一 一列举;
指挥者
指挥者类的目的就是根据使用人需求的不同来安装电脑,而使用人或者用户不需要知道安装的过程,而这里面的每一个步骤都是必须的;
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
namespace
BuilderPattern
{
class
ComputerDirector
{
public
void
ConstructComputer(ComputerBuilder builder)
{
//
安装内存条
builder.SetupMemory();
//
安装硬盘
builder.SetupHarddisk();
//
安装操作系统
builder.SetupOperatingSystem();
}
}
}
业务调用
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
namespace
BuilderPattern
{
class
Program
{
static
void Main(string[] args)
{
Console.WriteLine("----------------开始安装电脑-------------------------------------");
//研发人员使用电脑安装 建造者
ComputerBuilder builder = new DevelopmentComputerBuilder();
//普通办公使用电脑安装 建造者
//ComputerBuilder builder = new OfficeComputerBuilder();
ComputerDirector director = new ComputerDirector();
director.ConstructComputer(builder);
Console.WriteLine("----------------安装完成--------------------------------");
Console.ReadKey();
}
}
}
如果安装研发使用电脑,运行结果如下
如果安装普通办公使用电脑,运行结果如下
建造者模式结构图
本文实例中:
Builder就是安装电脑的抽象类 ;
ConstructBuilder为具体的建造者,就是上述的办公用电脑安装、研发用电脑安装;均具体实现了电脑安装抽象类;
Product产品就是具体的电脑;
Derictor,指挥者,上述示例即根据用户具体的需求安装不同配置的电脑;
总结
适用场景
1、需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员属性。
2、隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。
建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式。
优缺点
优点:
建造者模式的使用使得产品的内部表象可以独立的变化。使用建造者模式可以使客户端不必知道产品内部组成的细节。
将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,使得我们能够更加精确的控制复杂对象的产生过程。
每一个Builder都相对独立,而与其它的Builder无关(一个产品有一个Builder相对应),可以很方便的增加或替换建造者。
缺点:
建造者的缺点在与如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,这样这个模式就不适用。
原文:http://www.cnblogs.com/yx007/p/BuilderPattern.html
内容总结
以上是互联网集市为您收集整理的C#设计模式(5)-建造者模式全部内容,希望文章能够帮你解决C#设计模式(5)-建造者模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。