欢迎来到天天文库
浏览记录
ID:19629072
大小:39.50 KB
页数:7页
时间:2018-10-04
《java设计模式-建造模式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1、建造模式的组成 抽象建造者角色:这个角色用来规范产品对象的各个组成成分的建造。一般而言,此角色独立于应用程式的商业逻辑。 具体建造者角色:担任这个角色的是于应用程式紧密相关的类,他们在指导者的调用下创建产品实例。这个角色在实现抽象建造者角色提供的方法的前提下,达到完成产品组装,提供成品的功能。 指导者角色:调用具体建造者角色以创建产品对象。指导者并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者对象。产品角色:建造中的复杂对象。他要包含那些定义组件的类,包括将这些组件装配成产品的接口。2、角色组成的类图:首先客户程
2、式创建一个指导者对象,一个建造者角色,并将建造者角色传入指导者对象进行设置。然后,指导者按照步骤调用建造者的方法创建产品。最后客户程式从建造者或指导者那里得到产品。 从建造模式的工作流程来看,建造模式将产品的组装“外部化”到了建造者角色中来。这是和所有正规的工厂模式不相同的——产品的创建是在产品类中完成的。3、实现媒体能存在不同的表达形式,比如书籍、杂志和网络。这个例子表示不同形式的媒体构造的步骤是相似的,所以能被提取到指导者角色中去。 importjava.util.*; importjunit.framework.*; //
3、不同的媒体形式: classMediaextendsArrayList{} classBookextendsMedia{} classMagazineextendsMedia{} classWebSiteextendsMedia{} //进而不含不同的媒体组成元素: classMediaItem{ privateStrings; publicMediaItem(Strings){this.s=s;} publicStringtoString(){returns;} } classChapterextendsMedi
4、aItem{ publicChapter(Strings){super(s);} } classArticleextendsMediaItem{ publicArticle(Strings){super(s);} } classWebItemextendsMediaItem{ publicWebItem(Strings){super(s);} } //抽象建造者角色,他规范了所有媒体建造的步骤: classMediaBuilder{ publicvoidbuildBase(){} publicvoidaddMed
5、iaItem(MediaItemitem){} publicMediagetFinishedMedia(){returnnull;} } //具体建造者角色 classBookBuilderextendsMediaBuilder{ privateBookb; publicvoidbuildBase(){ System.out.println("Buildingbookframework"); b=newBook(); } publicvoidaddMediaItem(MediaItemchapter){ Syste
6、m.out.println("Addingchapter"+chapter); b.add(chapter); } publicMediagetFinishedMedia(){returnb;} } classMagazineBuilderextendsMediaBuilder{ privateMagazinem; publicvoidbuildBase(){ System.out.println("Buildingmagazineframework"); m=newMagazine(); } publicvoid
7、addMediaItem(MediaItemarticle){ System.out.println("Addingarticle"+article); m.add(article); } publicMediagetFinishedMedia(){returnm;} } classWebSiteBuilderextendsMediaBuilder{ privateWebSitew; publicvoidbuildBase(){ System.out.println("Buildingwebsiteframework"
8、); w=newWebSite(); } publicvoidaddMediaItem(MediaItemwebItem){ System.out.println("Addingwebitem"+w
此文档下载收益归作者所有