- 浏览: 34547 次
- 性别:
- 来自: 上海
最新评论
转自:http://www.2cto.com/kf/201207/141012.html
创建对象的方法很多,常见的有构造函数,静态工厂方法,工厂方法等。以上三种方法不适合创建需要提供多个参数的对象,而其中某些参数是可选的场景。读者可能会想到通过空的构造方法先构建一个对象的雏形,然后调用getter和setter方法向对象内部注入状态数据。这种方式看似很不错,但还是可能存在对象的状态数据未完全写入前对象已被使用的风险。
建造者模式将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
建造者模式涉及到的三个角色:
产品:被建造的对象;
建造者:抽象产品的建造过程;
导演者:按需要建造不同的产品。
以网上经典的创建文件的过程为例子,先来看要创建的产品,即文件对象,一个文件由三部分组成:
[java]
public class MyFile {
private String head;
private String content;
private String end;
public void setFcontent(Strig content) {
this.content = content;
}
public void setEnd(String end) {
this.end = end;
}
public void setHead(String head) {
this.head = head;
}
public void write(String path) throws IOException{
File f=new File(path);
PrintWriter out=new PrintWriter(new FileWriter(f));
out.println(head);
out.println(content);
out.println(end);
out.close();
}
}
再来看创建者,这里是一个接口:
[java]
public interface FileBuilder {
void buildHead();
void buildContent();
void buildEnd();
MyFile getResult();
}
最后是导演者,用来实施对象的创建过程:
[java]
public class FileDirector {
private FileBuilder filebuilder;
public FileDirector(FileBuilder filebuilder){
this.filebuilder=filebuilder;
}
public MyFile construct(){
filebuilder.buildHead();
filebuilder.buildContent();
filebuilder.buildEnd();
return filebuilder.getResult();
}
}
两个具体的创建者,分别用来创建XML文件和TXT文件:
[java]
public class XmlFileBuilder implements FileBuilder{
private MyFile file = new MyFile();;
public void buildHead() {
file.setHead("<?xml version=\"1.0\"?><content>");
}
public void buildContent() {
file.setContent("<node>value</node>");
}
public void buildEnd() {
file.setEnd("</content>");
}
public MyFile getResult() {
return file;
}
}
public class TxtFileBuilder implements FileBuilder{
private MyFile file = new MyFile();;
public void buildHead() {
file.setHead("this it the txt file head");
}
public void buildContent() {
file.setContent("this it the txt file content");
}
public void buildEnd() {
file.setEnd("this it the txt file end");
}
public MyFile getResult() {
return file;
}
}
最后是测试代码:
[java]
public void test(){
FileBuilder builder = new XmlFileBuilder();
FileDirector director = new FileDirector(builder);
MyFile file = director.construct();
//省略了使用对象的代码
}
看上面的代码,我们可以通过替换builder的实现来创建不同的对象,对象的创建过程得到了非常好的隐藏,并且不会暴露未创建完的对象。
作为开发者,你一定使用过JDK提供的工具类StringBuilder或StringBuffer,事实上StringBuilder和StringBuffer使用的正是建造者模式。www.2cto.com
更多JAVA设计模式
作者:fancy888
创建对象的方法很多,常见的有构造函数,静态工厂方法,工厂方法等。以上三种方法不适合创建需要提供多个参数的对象,而其中某些参数是可选的场景。读者可能会想到通过空的构造方法先构建一个对象的雏形,然后调用getter和setter方法向对象内部注入状态数据。这种方式看似很不错,但还是可能存在对象的状态数据未完全写入前对象已被使用的风险。
建造者模式将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
建造者模式涉及到的三个角色:
产品:被建造的对象;
建造者:抽象产品的建造过程;
导演者:按需要建造不同的产品。
以网上经典的创建文件的过程为例子,先来看要创建的产品,即文件对象,一个文件由三部分组成:
[java]
public class MyFile {
private String head;
private String content;
private String end;
public void setFcontent(Strig content) {
this.content = content;
}
public void setEnd(String end) {
this.end = end;
}
public void setHead(String head) {
this.head = head;
}
public void write(String path) throws IOException{
File f=new File(path);
PrintWriter out=new PrintWriter(new FileWriter(f));
out.println(head);
out.println(content);
out.println(end);
out.close();
}
}
再来看创建者,这里是一个接口:
[java]
public interface FileBuilder {
void buildHead();
void buildContent();
void buildEnd();
MyFile getResult();
}
最后是导演者,用来实施对象的创建过程:
[java]
public class FileDirector {
private FileBuilder filebuilder;
public FileDirector(FileBuilder filebuilder){
this.filebuilder=filebuilder;
}
public MyFile construct(){
filebuilder.buildHead();
filebuilder.buildContent();
filebuilder.buildEnd();
return filebuilder.getResult();
}
}
两个具体的创建者,分别用来创建XML文件和TXT文件:
[java]
public class XmlFileBuilder implements FileBuilder{
private MyFile file = new MyFile();;
public void buildHead() {
file.setHead("<?xml version=\"1.0\"?><content>");
}
public void buildContent() {
file.setContent("<node>value</node>");
}
public void buildEnd() {
file.setEnd("</content>");
}
public MyFile getResult() {
return file;
}
}
public class TxtFileBuilder implements FileBuilder{
private MyFile file = new MyFile();;
public void buildHead() {
file.setHead("this it the txt file head");
}
public void buildContent() {
file.setContent("this it the txt file content");
}
public void buildEnd() {
file.setEnd("this it the txt file end");
}
public MyFile getResult() {
return file;
}
}
最后是测试代码:
[java]
public void test(){
FileBuilder builder = new XmlFileBuilder();
FileDirector director = new FileDirector(builder);
MyFile file = director.construct();
//省略了使用对象的代码
}
看上面的代码,我们可以通过替换builder的实现来创建不同的对象,对象的创建过程得到了非常好的隐藏,并且不会暴露未创建完的对象。
作为开发者,你一定使用过JDK提供的工具类StringBuilder或StringBuffer,事实上StringBuilder和StringBuffer使用的正是建造者模式。www.2cto.com
更多JAVA设计模式
作者:fancy888
发表评论
-
模板方法模式
2013-06-27 10:28 421引用http://eneasy.iteye.com/blog/ ... -
状态模式
2013-06-26 16:38 541引用http://blog.csdn.net/hguisu/a ... -
策略模式
2013-06-24 18:28 571定义 策略模式(Strategy)属于对象行为型设计模式,主要 ... -
代理模式-动态代理
2013-06-20 16:37 490转自:http://www.cnblogs.com/jqyp/ ... -
观察者模式-JDK支持
2013-06-18 14:39 412JDK对观察者模式的支持主要是通过Observable类和Ob ... -
观察者模式
2013-06-18 13:31 368GoF说道:Observer模式的意图是“定义对象间的一种一对 ... -
备忘录模式
2013-06-14 15:45 379转载:http://blog.csdn.net/m136663 ... -
java 中介者模式
2013-06-07 16:19 589定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需 ... -
迭代器模式
2013-06-07 11:18 647定义:提供一种方法访 ... -
命令模式
2013-06-05 16:56 758定义 将一个请求封装为 ... -
责任链模式
2013-06-03 16:46 563转自:《深入浅出设计 ... -
代理模式
2013-05-27 11:07 426一、简介 代理模式有两 ... -
享元模式
2013-05-23 16:43 524一、引子 让我们先来复习下 java 中String 类型的特 ... -
门面模式
2013-05-21 15:28 420转自http://www.cnblogs.com/java-m ... -
装饰模式
2013-05-21 11:03 342动态地给一个对象添加一些额外的职责。就增加功能来说,Decor ... -
组合模式
2013-05-20 16:21 695一、引子 在大学的数据 ... -
桥接模式
2013-05-10 11:05 598认识桥接模式 (1)什么是桥接 在桥接模式里面 ... -
适配器模式
2013-05-08 14:04 6211. 概述 将一个类的接口转换成客户希望的另外一个接口 ... -
原型模式
2013-04-22 14:53 637转自:http://blog.csdn.net/zhengzh ... -
单态模式
2013-04-22 14:24 595保证一个类仅有一个实例,*提供一个访问它的全局访*点。 适 ...
相关推荐
建造者模式是一种结构型设计模式,它允许我们分步骤创建复杂对象,而无需暴露构建过程的内部细节。这种模式在Java编程中非常常见,尤其是在处理需要多种构建方式或需要隔离对象构造过程的场景。 建造者模式的核心...
建造者模式是一种设计模式,它将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在C++中实现建造者模式,我们可以遵循以下步骤: 首先,我们需要定义一个抽象建造者(Builder)类,它声明了一...
建造者模式(Builder Pattern)是软件工程中一种用于创建对象的抽象工厂方法,它将复杂的构建过程分解为一系列步骤,使得构建过程可以独立于其表示进行。这种模式允许客户端使用相同的构建过程创建不同表现形式的...
建造者模式(Builder Pattern)是设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,通过将构造过程与对象本身分离,使得同样的构造过程可以创建不同的表示。这种模式常用于当创建对象的步骤复杂或者...
### 建造者模式详解 #### 模式介绍 建造者模式(Builder Pattern)是设计模式中的一种,主要用于创建复杂对象。此模式的核心在于将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。简单...
Java建造者模式是一种设计模式,属于创建型模式,它的主要目的是通过隔离对象的构建过程和其表示,使得构造复杂对象的过程更加灵活。这种模式通常在需要创建对象的多个部分,并且这些部分可能需要以特定顺序组合时...
建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离,使得同样的构建过程可以创建不同的表示。这种模式经常在对象的构造过程中需要进行多种选择...
建造者模式,也被称为Director模式,是设计模式中的一种创建型模式。在iOS开发中,尤其是在构建复杂对象或者需要进行定制化组装时,建造者模式显得尤为重要。它将产品的构造过程与产品本身分离,使得创建过程更加...
建造者模式是一种设计模式,属于创建型模式,它允许我们分步骤构建复杂对象,而无需暴露构造过程。这种模式在IT行业中广泛应用于软件系统中,尤其是当需要创建的对象具有多种可变构造选项时。大众CC是一款知名的轿车...
建造者模式是软件设计模式中的一种,主要用于将复杂的对象构建过程与对象的使用分离,使得同样的构建过程可以创建不同的表示。在C#中,我们可以通过类的继承和接口的使用来实现这一模式。以下是关于“C#设计模式之...
建造者模式(Builder Pattern)是Java设计模式中的创建型模式之一,它允许我们分步骤创建复杂的对象,通过将构造过程与表示分离,使得同样的构造过程可以创建不同的表示。这种模式通常用于那些具有多种构建方式或者...
建造者模式,是一种创建型设计模式,它提供了一种创建对象的最佳方式,特别是在对象的构建过程比较复杂,需要多个步骤时。在建造者模式中,我们创建一个指导对象(Director),该对象负责组织构建过程,而具体的构建...
建造者模式是一种设计模式,它将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在Java中,这种模式通常用于构建对象时,尤其是当对象的构造过程复杂,需要多步骤或者允许用户自定义构建过程时...
【建造者模式】是软件工程中的一个设计模式,属于创建型模式,它隔离了对象的构造过程,并允许用户以步骤化的方式创建复杂对象。在Qt5框架中,我们可以利用其强大的C++支持来实现建造者模式,这对于创建复杂的UI或者...
建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表现。这就是建造者模式。 建造者模式可以把一个产品的内部表象与产品的生成过程分隔开来,从而可以使一个建造过程就可以生成...
在给定的压缩包文件中,"设计模式例子,观察者模式,建造者模式" 提到了两种重要的设计模式:观察者模式(Observer Pattern)和建造者模式(Builder Pattern)。下面我们将深入探讨这两种设计模式的概念、应用场景、...
建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离。这种模式常用于当一个对象的构建过程复杂且需要多个步骤时,或者当我们希望同一个构建过程...