建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
模式结构
< 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(" "); } } }
最后,运行一下,装冰箱成功。。。

