- 浏览: 216732 次
- 性别:
- 来自: 北京
文章分类
建造模式是将负责对象的构建与它的表示分离开来,从而可以达到同样的创建过程可以创建不同的表示。简单的讲就是将构造过程与组装的过程进行解耦。
注:构造过程是一样的,但是由于传入零件不同组装的产品也就不一样。
如构造的步骤定义在抽象的构造者中,具体构造者1生产出了各自汽车的零件,然后按照抽象构造者的步骤构造出了汽车。而构造者2生产出了火车的零件。然后按照抽象构造者生产出了火车。
这样导演者调用构造者1生产出汽车。调用构造者2生产出火车。
组成角色:抽象构造者、具体构造者、指导者、产品。
步骤:首先创建一个指导者,然后创建一个创建者,并将创建者传入给指导者对象进行配置。然后指导者按照创建者提供的方法创建产品。最后客户端从指导者那得到产品。
实例:
import java.util.*;
import junit.framework.*;
//不同的媒体形式:
class Media extends ArrayList {}
class Book extends Media {}//对应的产品,会关联到具体的构造者中
class Magazine 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(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 buildBase() {
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 buildBase() {
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 buildBase() {
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 MediaDirector(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.asList(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);
assertEquals(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, "magazine: [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]");
}
public static void main(String[] args) {
junit.textui.TestRunner.run(BuildMedia.class);
}
}
总结:建造模式使得客户不需要知道太多产品内部的细节。它将复杂对象的组建和表示方式封
装在一个具体的建造角色中,而且由指导者来协调建造者角色来得到具体的产品实例。
建造模式中很可能要用到组成成品的各种组件类,对于这些类的创建可以考虑使用工厂
方法或者原型模式来实现,在必要的时候也可以加上单例模式来控制类实例的产生
注:构造过程是一样的,但是由于传入零件不同组装的产品也就不一样。
如构造的步骤定义在抽象的构造者中,具体构造者1生产出了各自汽车的零件,然后按照抽象构造者的步骤构造出了汽车。而构造者2生产出了火车的零件。然后按照抽象构造者生产出了火车。
这样导演者调用构造者1生产出汽车。调用构造者2生产出火车。
组成角色:抽象构造者、具体构造者、指导者、产品。
步骤:首先创建一个指导者,然后创建一个创建者,并将创建者传入给指导者对象进行配置。然后指导者按照创建者提供的方法创建产品。最后客户端从指导者那得到产品。
实例:
import java.util.*;
import junit.framework.*;
//不同的媒体形式:
class Media extends ArrayList {}
class Book extends Media {}//对应的产品,会关联到具体的构造者中
class Magazine 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(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 buildBase() {
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 buildBase() {
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 buildBase() {
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 MediaDirector(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.asList(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);
assertEquals(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, "magazine: [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]");
}
public static void main(String[] args) {
junit.textui.TestRunner.run(BuildMedia.class);
}
}
总结:建造模式使得客户不需要知道太多产品内部的细节。它将复杂对象的组建和表示方式封
装在一个具体的建造角色中,而且由指导者来协调建造者角色来得到具体的产品实例。
建造模式中很可能要用到组成成品的各种组件类,对于这些类的创建可以考虑使用工厂
方法或者原型模式来实现,在必要的时候也可以加上单例模式来控制类实例的产生
发表评论
-
多种单例模式的分析
2012-03-28 18:06 0blog.csdn.net/derpvailzhangfan/ ... -
JDK中的设计模式
2012-03-14 22:56 01.Abstract Factory •java.util.C ... -
简单工厂模式使用心得(使用场景)
2012-02-23 18:24 11531在实际项目中,简单工厂模式是我们使用的最多的设计模式之一,简单 ... -
AbstractList中Iterator模式的妙用
2012-01-13 11:51 979AbstractList中为了实现顺序访问AbstractLi ... -
适合使用命令模式的情景
2012-01-13 11:31 919情景1.当借个类都拥有 ... -
Iterator模式
2012-01-13 10:57 897我个人常叫它游标模式,该模式的主要目的就是,顺序访问集合中的各 ... -
使用工厂设计模式的场景
2012-01-12 15:43 2795创建类对象虽然可以使用new(底层也是通过反射创建对象的),但 ... -
JDK中使用的设计模式
2012-01-13 10:04 14431.抽象工厂模式 实 ... -
JDK中使用的设计模式代码实例
2012-01-05 17:38 0http://stackoverflow.com/questi ... -
享元模式
2011-12-23 10:22 1041通常情况下,我们会需 ... -
策略模式
2011-12-22 17:07 891所谓策略模式就是定义了多种算法,而让不同算法之间的切换不会影响 ... -
合成设计模式
2011-12-22 16:28 991如果要将对象组织到树中,使用树来表示对象之间的关系,请考虑使用 ... -
责任链模式
2011-12-20 18:35 844此文转正于http://wenku.baidu.com/vie ... -
桥梁设计模式
2011-12-19 18:19 845如果有很多对象要处理,而又有很多操作要做。这时可以考虑使用桥梁 ... -
多线程设计模式(Thread-Specific storage)
2011-12-12 15:29 5857引用自http://www.riabook.cn/doc/de ... -
代理模式
2011-11-30 15:26 940代理模式实际上是对对象的一种代理,以控制对象的访问。 有些情况 ... -
观察者模式
2011-11-16 14:48 1425声明转载的,简单易懂,呵呵 观察者模式的构造 l 抽 ... -
命令模式
2011-11-16 14:11 1258今天想学学命令模式,看见了一个文章讲的就是命令模式,感觉实例比 ... -
设计模式之适配器模式
2011-11-09 18:24 973适配器模式:主要是为了解决,老的对象在新的环境中不兼容的现象。 ... -
设计模式之模版方法
2011-11-09 16:31 825模版方法是一种非常简单的设计模式:简单的理解就是将关键的业务方 ...
相关推荐
建造模式是一种设计模式,它将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在软件工程中,这种模式常用于当一个类的实例化过程过于复杂,或者需要通过不同的步骤来构建时。建造模式允许...
建造模式(Builder Pattern)是一种创建型设计模式,它将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式常用于当构造过程需要步骤化,并且每个步骤可能有多种实现时,比如在软件工程...
Java设计模式中的建造模式,又称为构造者模式,是一种用于对象构建的创建型设计模式。在软件工程中,当我们需要创建复杂对象时,通常会遇到一个问题:这些对象的构造过程非常繁琐,涉及到多个步骤,而每个步骤都有...
基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等 Java设计模式共有23种,分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式...
设计模式之---建造模式 1,建造模式属于对象的创建模式,是将一个产品的内部表象和产品的生产分割出来 2.使用原因:为了将构建复杂对象的过程和它的不见解耦; 3 使用情况:建造模式利用一个导演着对象和一个具体...
在提供的文件列表中,"建造模式.ppt"可能是详细的PPT讲解,包含了建造者模式的概念、示例代码和实际案例分析。"BuilderDemo"可能是演示建造者模式的Java代码示例,通过一个具体的例子来展示如何使用建造者模式创建和...
【作品名称】:基于pygame的坦克大战小游戏,实现了菜单选择、多种模式、多种关卡选择、地图建造模式【课程设计】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业...
建造者模式是一种设计模式,属于对象的创建模式。它的主要目的是将产品的构建过程与产品的表示分离,使得构建过程可以独立于不同的表示进行。这有助于在不改变产品内部构造的情况下,改变产品的构造方式。 在建造者...
建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离,使得同样的构建过程可以创建不同的表示。这种模式经常在对象的构造过程中需要进行多种选择...
建造者模式是一种结构型设计模式,它允许我们分步骤创建复杂对象,而无需暴露构建过程的内部细节。这种模式在Java编程中非常常见,尤其是在处理需要多种构建方式或需要隔离对象构造过程的场景。 建造者模式的核心...
Builder模式是一种设计模式,它属于创建型模式,主要用于构建复杂对象。这种模式提供了一种方法来分离开对象的构造过程和表示方式,使得构造过程可以按照步骤进行,并且允许用户只指定他们关心的部分,而忽略其他不...
建造者模式(Builder Pattern)是软件工程中一种用于创建对象的抽象工厂方法,它将复杂的构建过程分解为一系列步骤,使得构建过程可以独立于其表示进行。这种模式允许客户端使用相同的构建过程创建不同表现形式的...
本文将重点介绍标题中提到的五种设计模式:建造者模式、代理模式、观察者模式、策略模式以及状态模式。 **1. 建造者模式(Builder)** 建造者模式是一种创建型设计模式,它允许我们分步骤构建复杂对象,而无需暴露...
建造者模式是一种设计模式,它将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在C++中实现建造者模式,我们可以遵循以下步骤: 首先,我们需要定义一个抽象建造者(Builder)类,它声明了一...
建造者模式(Builder Pattern)是设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,通过将构造过程与对象本身分离,使得同样的构造过程可以创建不同的表示。这种模式常用于当创建对象的步骤复杂或者...
Java建造者模式是一种设计模式,属于创建型模式,它的主要目的是通过隔离对象的构建过程和其表示,使得构造复杂对象的过程更加灵活。这种模式通常在需要创建对象的多个部分,并且这些部分可能需要以特定顺序组合时...
### 建造者模式详解 #### 模式介绍 建造者模式(Builder Pattern)是设计模式中的一种,主要用于创建复杂对象。此模式的核心在于将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。简单...
建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离。这种模式常用于当一个对象的构建过程复杂且需要多个步骤时,或者当我们希望同一个构建过程...
建造者模式是软件设计模式中的一种,主要用于将复杂的对象构建过程与对象的使用分离,使得同样的构建过程可以创建不同的表示。在C#中,我们可以通过类的继承和接口的使用来实现这一模式。以下是关于“C#设计模式之...