Builder模式在网站自动生成系统中的应用

一个网站的生成,包括复杂的建立过程,采取的技术不同,这个建立过程就不一样,所以类似Jive的forumFactory,在该系统中也有一个SiteFactory,用来定义不同的站点生成工厂。

现在看看我的系统中站点的生成过程:
1.生成站点结构
2.生成按钮button
3.生成同级别中的集合buttons
4.更新同级别中页面指向新页面的链接
5.生成新的页面

这5步可以看成是5个部件,这个5个部件中任何一个的组装相当复杂。

我们再看看将这5个部件组装起来的过程也比较复杂,站点管理中有删除页面 增加页面,这两中过程都要涉及上面5个部件,但过程次序不一样。

根据Builder模式过程和部件分离的宗旨,很明显这里需要使用builder模式,这样可以将组装站点的过程和5个部件解耦。

设计后,存在下列几个主要class:
Pagebuilder 这是一个抽象类,封装了上面5个部件的组装方法,需要具体定义的有3个。

addPageBuilder 增加新页面,继承pageBuilder类,具体实现需要具体定义的部件组装方法,如增加结构 增加子菜单按钮。

delPageBuilder 删除页面 继承PageBuilder类,是其concrete之一,主要定义部件的拆装方法。

IniPageBuilder 初始化页面,站点第一次建立,需要一些初始化页面,也是PageBuilder的concrete之一。


PageDirector 封装站点的组建过程,比如Conctruct方法,就是封装了增加页面的组建过程,把PageBuilder中5个部件调出来,依据不同的条件和次序排列出增减页面的组建过程。


客户端调用,比如新增页面:
PageBuilder pageBuilder=new addPageBuilder(this,title,name,icon,description);
PageDirector pagedirector = new PageDirector(pageBuilder);
pagedirector.constructNewPage(previd,pid);

excellent !

增加页面非常适用,如果是删除页面呢?我如何组装呢??

再有,这种模式能否使用在定义表单呢?我想自己定制表单,能否用这个模式?

可以,表单是由按钮 text等部件组成,使用builder模式可以组装成自己的表单。

删除也相当于builder ,这个builder就从有到无。

可是Text都是一样的啊,我能不能这样写

FormBuilder formBuilder=new addForm(Text,Text,Text,Text,Text);
FormDirector formdirector = new FormDirector(pageBuilder);
Formdirector.constructNewForm(previd,pid);

我想定义不同的表单,他们的位置怎么定位??


还有,删除呢?这么写对么?
FormBuilder formBuilder=new delForm(form);
FormDirector formdirector = new FormDirector(pageBuilder);
Formdirector.constructNewForm(previd,pid);

写法对的。

不同的表单你要分析是不同在什么地方?
是组装前后顺序过程不一样还是具体部件不一样。
前者在director中做。
后者在builder中做。

关键难点是在提炼builder的部件方法,到底哪些部件是都要用的,哪些只是在一个特别组装过程要用的。
这个很象车间主任做的活

象这样的组装过程
FormBuilder formBuilder=new addForm(Text,Text,Text,Text,Text);

我怎么定位这些Text在页面的什么位置呢?

我又是怎么存储这些页面的呢?

定位各个text位置 属于组装过程,在director定义