一、应用场景
在软件开发中,有时会面临着一个复杂对象的创建工作,通常各个部分的子对象用一定的算法构成,由于需求的变化,这个复杂对象的各个部分也经常面临着剧烈的变化,但是将他们组合到一起却相对的稳定。
子部件较多,没有恰当赋值之前,对象不能当做一个完整的对象或者产品使用(邮件包括发件人、收件人、抄送人、主题、内容)
子部件需要按照一定顺序进行赋值才有意义,在某个子部件没有赋值之前,另一个子部件就无法赋值(装修要先改水电、再贴瓷砖、家电、电视墙)
二、小白装电脑
public class Computer
{
private List<string> lstPart = new List<string>();
public void Addpart(string part)
{
lstPart.Add(part);
}
public void ShowComputer()
{
foreach (string item in lstPart)
{
Console.WriteLine("正在安装"+item);
}
}
}
//问题1、所有的内容全部由客户自己搞定
//问题2、创建对象和客户端强耦合
Computer computer = new Computer();
computer.Addpart("i5的CPU");
computer.Addpart("独显");
computer.Addpart("256G的硬盘");
computer.Addpart("17寸的显示器");
computer.Addpart("win10的操作系统");
三、老鸟装电脑
建造者模式,是将一个复杂对象的创建和它的表示分离,使得同样的创建过程,可以创建不同的对象。在建造者模式中出现的四个不同类对象:
//具体的产品
public class Computer
{
private List<string> lstPart = new List<string>();
public void Addpart(string part)
{
lstPart.Add(part);
}
public void ShowComputer()
{
foreach (string item in lstPart)
{
Console.WriteLine("正在安装"+item);
}
}
}
//抽象的创建者
public interface IbuilderComputer
{
//1.封装创建各个对象的过程
void BuildCpu();
void BuildDisk();
void BuildMemory();
void BuildScreen();
void BuildSystem();
//2.将创建好的对象返回
Computer GetComputer();
}
//高配电脑 具体的创建者
public class GoodComputer : IbuilderComputer
{
private Computer computer = new Computer();
public void BuildCpu()
{
computer.Addpart("i7的cpu");
}
public void BuildDisk()
{
computer.Addpart("2T的固态硬盘");
}
public void BuildMemory()
{
computer.Addpart("32G的内存");
}
public void BuildScreen()
{
computer.Addpart("32寸的显示器");
}
public void BuildSystem()
{
computer.Addpart("win10处理器");
}
public Computer GetComputer()
{
return this.computer;
}
}
//低配电脑 具体的创建者
public class LowComputer : IbuilderComputer
{
private Computer computer = new Computer();
public void BuildCpu()
{
computer.Addpart("i3的cpu");
}
public void BuildDisk()
{
computer.Addpart("1T的固态硬盘");
}
public void BuildMemory()
{
computer.Addpart("16G的内存");
}
public void BuildScreen()
{
computer.Addpart("20寸的显示器");
}
public void BuildSystem()
{
computer.Addpart("win8处理器");
}
public Computer GetComputer()
{
return this.computer;
}
}
//监工 创建对象的顺序
public class Directory
{
public void BuildComputer(IbuilderComputer builderComputer)
{
builderComputer.BuildCpu();
builderComputer.BuildDisk();
builderComputer.BuildMemory();
builderComputer.BuildScreen();
builderComputer.BuildSystem();
}
}
IbuilderComputer b1 = new GoodComputer();
IbuilderComputer b2 = new LowComputer();
Directory directory = new Directory();
//让b1这个具体的创建者按照稳定的过程(要求的逻辑),进行复杂对象的创建
directory.BuildComputer(b1);
Computer computer1= b1.GetComputer();
computer1.ShowComputer();
directory.BuildComputer(b2);
Computer computer2 = b2.GetComputer();
computer2.ShowComputer();
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有