|
建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
模式结构

< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+CjxwPiA8L3A+CjxoMj69qNTs1d/Eo8q9tcS6w7Smo7o8L2gyPgo8cD48L3A+CjxwPiAgICAgIL2o1OzV38Sjyr2/ydLUvavSu7j2svrGt7XExNqyv7Htz/PT67L6xre1xMn6svq5/bPMt9a47r+qwLSjrLTTtvi/ydLUyrnSu7j2vajU7Ln9s8zJ+rPJvt/T0LK7zay1xMTasr+x7c/ztcSy+sa3ttTP86GjyOe5+87Sw8fTw8HLvajU7NXfxKPKvaOsxMfDtNPDu6e+zda70OjSqr2o1Oy1xMDg0M2+zb/J0tS1w7W9y/zDx6Ostvi+38zlvajU7LXEuf2zzLrNz7i92r7NsrvQ6NKq1qq1wMHLoaM8L3A+CjxwPjxicj4KPC9wPgo8aDI+us7Kscq508O9qNTs1d/Eo8q9o788L2gyPgo8cD4gICAgICAg1vfSqsrH08PT2rS0vajSu9CpuLTU07XEttTP86Os1eLQqbbUz/PE2rK/ubm9qLzktcS5udTsy7PQ8s2os6PKx87Itqi1xKOstau21M/zxNqyv7XEubm8/s2os6PD5sHZ18W4tNTTtcSx5LuvoaM8L3A+CjxwPjxicj4KPC9wPgo8aDE+yr7A/TwvaDE+CjxwPjwvcD4KPHA+ICAgIMSzxOqjrNbQ0eu158rTzKi+2bDstcS0ur3awaq7ts3tu+HJz7XE0ru49tChxrejrNPQ1eLR+dK7uPbH6b3ao7rLzrWktaS4+NXUsb7JvbP2uPbM4rb5LS3I57rOsNG088/z17C1vbH5z+TA76Os1dSxvsm9w7u08MnPoaPLzrWktaS45svf1dSxvsm9serXvLTwsLijurXa0ruyvbDRsfnP5MPFtPK/qqOstdq2/rK9sNG088/zt8W9+Milo6y12sj9sr2w0bH5z+TDxbnYyc+hozwvcD4KPHA+PGJyPgo8L3A+CjxwPiAgIAo8aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/45/1_exm65__.jpg" alt="\">
同理,我们可以按照这个步骤,向冰箱里装其他东西:比如,过期的牛奶,吃剩的Pizza,甚至还可以模仿俄罗斯套娃,装个冰箱(冰箱的使用详见冰箱使用手册,I bet 冰箱绝对不是这样用的。。)。。下面来看一下装大象的代码:
namespace 把大象装冰箱
{
/*首先抽象出一个建造过程的类,将把“东西装在冰箱”
* 这个过程给稳定住。就是说,不管向冰箱里面装什么东西
* 都得按照这个步骤来,一步都不能丢。*/
abstract class PutIntoFridge
{
public abstract void OpenFridge();
public abstract void PutInto();
public abstract void CloseFridge();
}
/*写一个把大象装冰箱的类,然后让这个类去继承PutIntoFridge
* 在这个类里面,给出如何把大象装冰箱的具体实现。*/
class PutElephantIntoFri : PutIntoFridge
{
private string name;
public PutElephantIntoFri(string name)
{
this.name = name;
}
public override void OpenFridge()
{
Console.WriteLine("打开了冰箱门~~");
}
public override void PutInto()
{
Console.WriteLine("把 {0} 装进冰箱。", name);
}
public override void CloseFridge()
{
Console.WriteLine("把冰箱门关上了。");
}
}
/*指挥者:用来指挥把东西装冰箱这个过程,用它来隔离用户与
* 建造过程的关联。*/
class Director
{
private PutIntoFridge pif;
//构造的时候指明要实现把什么东西装冰箱
public Director(PutIntoFridge pif)
{
this.pif = pif;
}
/*写一个把大象装冰箱的过程,用以隐藏具体的把大象装冰箱的过程
* 使用时只需调用这一个方法就行。*/
public void CreatePutIntoFif()
{
pif.OpenFridge();
pif.PutInto();
pif.CloseFridge();
}
}
class Program
{
static void Main(string[] args)
{
PutElephantIntoFri peif = new PutElephantIntoFri("小象");
Director director = new Director(peif);
director.CreatePutIntoFif();
Console.WriteLine(" ");
}
}
}
最后,运行一下,装冰箱成功。。。

|