今天重读建造者模式【Build Pattern】,终于明白了其存在之意图和应用之场景。
其意在创建一个复杂的对象,这个对象由一系列稳定的动作组成,单不同的产品具体的动作实现又不一样。而其中重点在于将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示
这个抽象和封装的过程非常类似于模板方法模式,但是要注意他们的关注点不同:模板方法重在“行为”,是指稳定的一系列动作的实现,属于行为型模式;而建造者模式则意在对象的创建,创建一个复杂的、具有多个实现步骤的对象,属于创建型模式。
下面的代码实现电脑的组装。一台电脑可看做一个复杂的对象,其组装过程需要安装cpu,主板,内存,硬盘等部件。当然不同品牌的电脑安装的部件又不相同,但是这个过程中每个步骤都是不可少的,是稳定的。
结构图:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BuildPattern
{
class Program
{
static void Main(string[] args)
{
Computer pc = new MsComputer();
Build build = new Build(pc);
build.BeginBuildComputer();
pc.ShowMyComputer();
}
}
//产品抽象类
abstract class Computer
{
public string Cpu { set; get; }
public string HardDisk { set; get; }
public string KeyBoard { set; get; }
public string Memory { set; get; }
public abstract void SetCpu();
public abstract void SetHardDisk();
public abstract void SetKeyBoard();
public abstract void SetMemory();
public void ShowMyComputer()
{
Console.WriteLine("------------");
Console.WriteLine("My Compter Config:");
Console.WriteLine("Cpu:" + Cpu);
Console.WriteLine("KeyBoard:" + KeyBoard);
Console.WriteLine("HardDisk:" + HardDisk);
Console.WriteLine("Memory:" + Memory);
}
}
//具体类
class InterComputer : Computer
{
public override void SetCpu()
{
Console.WriteLine("setting Inter Cpu for this computer");
Cpu = "Inter Cpu";
}
public override void SetHardDisk()
{
Console.WriteLine("setting Inter HardDisk for this computer");
HardDisk = "Inter HardDisk";
}
public override void SetKeyBoard()
{
Console.WriteLine("setting Inter KeyBoard for this computer");
KeyBoard = "Inter KeyBoard";
}
public override void SetMemory()
{
Console.WriteLine("setting Inter Memory for this computer");
Memory = "Inter Memory";
}
}
//具体类
class MsComputer : Computer
{
public override void SetCpu()
{
Console.WriteLine("setting Ms Cpu for this computer");
Cpu = "Ms Cpu";
}
public override void SetHardDisk()
{
Console.WriteLine("setting Ms HardDisk for this computer");
HardDisk = "Ms HardDisk";
}
public override void SetKeyBoard()
{
Console.WriteLine("setting Ms KeyBoard for this computer");
KeyBoard = "Ms KeyBoard";
}
public override void SetMemory()
{
Console.WriteLine("setting Ms Memory for this computer");
Memory = "Ms Memory";
}
}
//建造者
class Build
{
Computer computer;
public Build(Computer computer)
{
this.computer = computer;
}
public void BeginBuildComputer()
{
computer.SetCpu();
computer.SetHardDisk();
computer.SetKeyBoard();
computer.SetMemory();
}
}
}
学习参考:
http://www.cnblogs.com/Terrylee/archive/2005/12/19/299878.html
http://www.cnblogs.com/zhenyulu/articles/37378.aspx
大话设计模式之建造者模式