设计模式之Build【创建模式】
Builder模式定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知道内部的具体构建细节.Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到.、
为何使用?
是为了将构建复杂对象的过程和它的部件解耦.注意: 是解耦过程和部件. 因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮 方向盘 发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开.
如何使用?
首先假设一个复杂对象是由多个部件组成的,Builder模式是把复杂对象的创建和部件的创建分别开来,分别用Builder类和Director类来表示
/// <summary>
/// 构造者模式
/// </summary>
public class BuildMode
{
public BuildMode()
{
AbstractBuild build = new NoteBook();
BuildFactory bf = new BuildFactory();
bf.BuildComputer(build);
build.Build.ShowInfo();
}
}
public interface IBuild { void ShowInfo();}
/// <summary>
/// 电脑
/// </summary>
public class Compute :IBuild
{
private string videoCard;
/// <summary>
/// 声卡
/// </summary>
public string VideoCard
{
get { return videoCard; }
set { videoCard = value; }
}
private string mainboard;
/// <summary>
/// 主板
/// </summary>
public string Mainboard
{
get { return mainboard; }
set { mainboard = value; }
}
private string cpu;
/// <summary>
/// CPU
/// </summary>
public string Cpu
{
get { return cpu; }
set { cpu = value; }
}
private string harddisk;
/// <summary>
/// 硬盘
/// </summary>
public string Harddisk
{
get { return harddisk; }
set { harddisk = value; }
}
private string memory;
/// <summary>
/// 内存
/// </summary>
public string Memory
{
get { return memory; }
set { memory = value; }
}
public void ShowInfo()
{
Console.WriteLine("==================SystemInfo==================");
Console.WriteLine("CPU:" + cpu);
Console.WriteLine("MainBoard:" + mainboard);
Console.WriteLine("Memory:" + memory);
Console.WriteLine("VideoCard:" + videoCard);
Console.WriteLine("HardDisk:" + harddisk);
}
}
public abstract class AbstractBuild
{
private string name;
protected string Name
{
get { return name; }
set { name = value; }
}
private IBuild build;
public IBuild Build
{
get { return build; }
set { build = value; }
}
public AbstractBuild()
{
build = new Compute();
}
public abstract void SetCpu();
public abstract void SetMemory();
public abstract void SetHardDisk();
public abstract void SetMainBoard();
public abstract void SetVedioCard();
}
/// <summary>
/// 建造工厂
/// </summary>
public class BuildFactory
{
public void BuildComputer(AbstractBuild build)
{
build.SetCpu();
build.SetHardDisk();
build.SetMainBoard();
build.SetMemory();
build.SetVedioCard();
}
}
public class NoteBook:AbstractBuild{
public NoteBook() { Name = "笔记本"; }
public override void SetCpu()
{
((Compute)Build).Cpu = "CPU";
}
public override void SetMemory()
{
((Compute)Build).Memory = "Memory";
}
public override void SetHardDisk()
{
((Compute)Build).Harddisk = "Harddisk";
}
public override void SetMainBoard()
{
((Compute)Build).Mainboard = "Mainboard";
}
public override void SetVedioCard()
{
((Compute)Build).VideoCard = "VedioCard";
}
}
浙公网安备 33010602011771号