将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示

                                                                 --《设计模式》GOF



Insus.NET在ASP.NET环境中,列举一个建造者设计模式(Builder)例子,以最帖近开发环境与需求。

开发站点时,我们需要开发新闻类,视频类,图片类等等。每个网页还有可能是页头,内容,页脚等。开发这些页头,内容与页脚时,我们会使用用户控件来写好,加载至网页中去。

每个类别的网页,你分别新建三个用户控件(ascx), NewsHeader,NewsContent,NewsFooter, xxxHeader,xxxContent,xxxFooter等......

NewsHeader.ascx:
设计模式--建造者(Builder)模式_UserControl

NewsContent.ascx:
设计模式--建造者(Builder)模式_Abstract_02

NewsFooter.ascx:
设计模式--建造者(Builder)模式_Dictionary_03


就是说,把网页每块做成用户控件,这样细化与维护。

现在我们需要建造一个网页(产品),这个产品是由三个部件组成。
设计模式--建造者(Builder)模式_UserControl_04


你的网页会有很多,如上所列举的,显示文章,新闻,视频,图片等。我们需要定义一个抽象的共同接口,让具体类有一个统一标准:
设计模式--建造者(Builder)模式_Dictionary_05

建造者设计模式,还一个角色,就是指挥者:
设计模式--建造者(Builder)模式_UserControl_06


现在我们可以建造具体类,真实产品(网页),NewPage, VideoPage,ArticlePage 等等:
设计模式--建造者(Builder)模式_Dictionary_07


现在,我们需要在实际的网页中去展示完整的产品(网页):
在xxx.aspx中,拉一个控件容器,如PlaceHolder,这里只是举列,实际环境中,也许需要拉好几个容器,来在网页定义与动态加载。
设计模式--建造者(Builder)模式_Abstract_08


xxx.aspx.cs:
设计模式--建造者(Builder)模式_Abstract_09


网页运行时,看看效果:
设计模式--建造者(Builder)模式_PlaceHolder_10

 

下面内容于2014-12-23 13:32分补充:
忘记把完整的演示代码分享了:javascript:void(0)