收藏 分享(赏)

java设计模式-建造模式.doc

上传人:dreamzhangning 文档编号:2299564 上传时间:2018-09-10 格式:DOC 页数:7 大小:39.50KB
下载 相关 举报
java设计模式-建造模式.doc_第1页
第1页 / 共7页
java设计模式-建造模式.doc_第2页
第2页 / 共7页
java设计模式-建造模式.doc_第3页
第3页 / 共7页
java设计模式-建造模式.doc_第4页
第4页 / 共7页
java设计模式-建造模式.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、1、建造模式的组成抽象建造者角色:这个角色用来规范产品对象的各个组成成分的建造。一般而言,此角色独立于应用程式的商业逻辑。具体建造者角色:担任这个角色的是于应用程式紧密相关的类,他们在指导者的调用下创建产品实例。这个角色在实现抽象建造者角色提供的方法的前提下,达到完成产品组装,提供成品的功能。指导者角色:调用具体建造者角色以创建产品对象。指导者并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者对象。 产品角色:建造中的复杂对象。他要包含那些定义组件的类,包括将这些组件装配成产品的接口。2、角色组成的类图:首先客户程式创建一个指导者对象,一个建造者角色,并将建造者角色传入指导者对象进

2、行设置。然后,指导者按照步骤调用建造者的方法创建产品。最后客户程式从建造者或指导者那里得到产品。从建造模式的工作流程来看,建造模式将产品的组装“外部化”到了建造者角色中来。这是和所有正规的工厂模式不相同的产品的创建是在产品类中完成的。3、实现媒体能存在不同的表达形式,比如书籍、杂志和网络。这个例子表示不同形式的媒体构造的步骤是相似的,所以能被提取到指导者角色中去。import java.util.*;import junit.framework.*;/不同的媒体形式:class Media extends ArrayList class Book extends Media class Mag

3、azine extends Media class WebSite extends Media / 进而不含不同的媒体组成元素:class MediaItem private String s;public MediaItem(String s) this.s = s; public String toString() return s; class Chapter extends MediaItem public Chapter(String s) super(s); class Article extends MediaItem public Article(String s) super

4、(s); class WebItem extends MediaItem public WebItem(String s) super(s); / 抽象建造者角色,他规范了所有媒体建造的步骤:class MediaBuilder public void buildBase() public void addMediaItem(MediaItem item) public Media getFinishedMedia() return null; /具体建造者角色class BookBuilder extends MediaBuilder private Book b;public void b

5、uildBase() System.out.println(“Building book framework“);b = new Book();public void addMediaItem(MediaItem chapter) System.out.println(“Adding chapter “ + chapter);b.add(chapter);public Media getFinishedMedia() return b; class MagazineBuilder extends MediaBuilder private Magazine m;public void build

6、Base() System.out.println(“Building magazine framework“);m = new Magazine();public void addMediaItem(MediaItem article) System.out.println(“Adding article “ + article);m.add(article);public Media getFinishedMedia() return m; class WebSiteBuilder extends MediaBuilder private WebSite w;public void bui

7、ldBase() System.out.println(“Building web site framework“);w = new WebSite();public void addMediaItem(MediaItem webItem) System.out.println(“Adding web item “ + webItem);w.add(webItem);public Media getFinishedMedia() return w; /指导者角色,也叫上下文class MediaDirector private MediaBuilder mb;public MediaDirec

8、tor(MediaBuilder mb) this.mb = mb; /具有策略模式相似特征的public Media produceMedia(List input) mb.buildBase();for(Iterator it = input.iterator(); it.hasNext();)mb.addMediaItem(MediaItem)it.next();return mb.getFinishedMedia();/测试程式客户程式角色public class BuildMedia extends TestCase private List input = Arrays.asLis

9、t(new MediaItem new MediaItem(“item1“), new MediaItem(“item2“),new MediaItem(“item3“), new MediaItem(“item4“),);public void testBook() MediaDirector buildBook = new MediaDirector(new BookBuilder();Media book = buildBook.produceMedia(input);String result = “book: “ + book;System.out.println(result);a

10、ssertEquals(result, “book: item1, item2, item3, item4“);public void testMagazine() MediaDirector buildMagazine = new MediaDirector(new MagazineBuilder();Media magazine = buildMagazine.produceMedia(input);String result = “magazine: “ + magazine;System.out.println(result);assertEquals(result, “magazin

11、e: item1, item2, item3, item4“);public void testWebSite()MediaDirector buildWebSite = new MediaDirector(new WebSiteBuilder();Media webSite = buildWebSite.produceMedia(input);String result = “web site: “ + webSite;System.out.println(result);assertEquals(result, “web site: item1, item2, item3, item4“)

12、;public static void main(String args) junit.textui.TestRunner.run(BuildMedia.class);在实现的时候,抽象建造角色提供的接口必须足够普遍,以适应不同的具体建造角色。对于一个建造角色来说可能某个步骤是不必的,能将此接口实现为空。多个产品之间可能没有太多的一起点,能提供一个标示接口作为抽象产品角色;也能不提供抽象产品角色,这时要将提供产品的接口从抽象建造角色里面去掉,不然就会编译出问题。4、应用好处建造模式能使得产品内部的表象独立变化。在原来的工厂方法模式中,产品内部的表象是由产品自身来决定的;而在建造模式中则是“外部

13、化”为由建造者来负责。这样定义一个新的具体建造者角色就能改动产品的内部表象,符合“开闭原则” 。建造模式使得客户不必知道太多产品内部的细节。他将复杂对象的组建和表示方式封装在一个具体的建造角色中,而且由指导者来协调建造者角色来得到具体的产品实例。每一个具体建造者角色是毫无关系的。建造模式能对复杂产品的创建进行更加精细的控制。产品的组成是由指导者角色调用具体建造者角色来逐步完成的,所以比起其他创建型模式能更好的反映产品的构造过程。5、扩展建造模式中非常可能要用到组成成品的各种组件类,对于这些类的创建能考虑使用工厂方法或原型模式来实现,在必要的时候也能加上单例模式来控制类实例的产生。不过要坚持一个大前提就是要使引入的模式给你的系统带来好处,而不是臃肿的结构。 建造模式在得到复杂产品的时候可能要引用多个不同的组件,在这一点上来看,建造模式和抽象工厂模式是相似

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报