`
fancy888
  • 浏览: 38662 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

JAVA设计模式:建造者(Builder)

 
阅读更多

      创建对象的方法很多,常见的有构造函数,静态工厂方法,工厂方法等。以上三种方法不适合创建需要提供多个参数的对象,而其中某些参数是可选的场景。读者可能会想到通过空的构造方法先构建一个对象的雏形,然后调用getter和setter方法向对象内部注入状态数据。这种方式看似很不错,但还是可能存在对象的状态数据未完全写入前对象已被使用的风险。

 

      建造者模式将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。

 

      建造者模式涉及到的三个角色:

  • 产品:被建造的对象;
  • 建造者:抽象产品的建造过程;
  • 导演者:按需要建造不同的产品。

      以网上经典的创建文件的过程为例子,先来看要创建的产品,即文件对象,一个文件由三部分组成:

 

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();  
    }
}

 

     再来看创建者,这里是一个接口:

 

public interface FileBuilder {

    void buildHead();

    void buildContent();
 
    void buildEnd();

    MyFile getResult();

}

 

     最后是导演者,用来实施对象的创建过程:

 

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文件:

 

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;
    }
}

 

      最后是测试代码:

 

public void test(){
    FileBuilder builder = new XmlFileBuilder();
    FileDirector director = new FileDirector(builder);
    MyFile file = director.construct();
    //省略了使用对象的代码
}

 

      看上面的代码,我们可以通过替换builder的实现来创建不同的对象,对象的创建过程得到了非常好的隐藏,并且不会暴露未创建完的对象。

 

      作为开发者,你一定使用过JDK提供的工具类StringBuilder或StringBuffer,事实上StringBuilder和StringBuffer使用的正是建造者模式。

 


       更多精彩原创文章请关注笔者的原创博客:http://www.coolfancy.com

0
0
分享到:
评论

相关推荐

    Java 设计模式-建造者模式(Builder)Android讲解

    Java 设计模式-建造者模式(Builder)结合Android小知识讲解,简单明了

    69-Java设计模式之建造者 Builder1

    建造者又分两种,一种是有一个专门的类负责决定建造的顺序,如上例,有人可以决定建筑商先建什么,后建什么。代码如下(原谅我用拼音,这么做是不对的):房子类:园林类:

    java设计模式【之】建造者模式【源码】【场景:车辆组装】

    java设计模式【之】建造者模式【源码】【场景:车辆组装】 将复杂的对象构建,与对象的使用进行分离 用户只需要通过简单流程即可创建出对象 方法调用顺序,步骤的不同实现 优点:封装性号,创建和使用分离,扩展性...

    Java设计模式之建造者模式(Builder模式)介绍

    主要介绍了Java设计模式之建造者模式(Builder模式)介绍,本文讲解了为何使用建造者模式、如何使用建造者模式、Builder模式的应用等内容,需要的朋友可以参考下

    33种JAVA设计模式DEMO

    建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2 结构型模式 这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 适配器模式(Adapter Pattern) 桥接...

    Java设计模式之Builder建造者模式

    主要为大家详细介绍了Java设计模式之Builder建造者模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    设计模式-Builder模式demo

    demo中使用了设计模式中的建造者模式,代码非常精简,本地可正常运行,亲测有效!

    java设计模式教程+源代码

    Builder ( 建造者模式 ) Prototype ( 原型模式 ) Adapter ( 适配器模式 ) Bridge ( 桥接模式 ) Composite ( 组合模式 ) Decorator ( 装饰模式 ) Facade ( 外观模式 ) Flyweight ( 享元模式 ) Proxy ( 代理...

    用Java实现23种设计模式

    用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...

    23种java设计模式

    Factory(工厂模式)、Singleton(单态)、Builder(建造者模式)、Prototype(原型模式)、工厂方法模式。2、结构模式:Flyweight(共享模式)、Bridge(桥模式)、Decorator(装饰模式)、Composite(组合模式)、Adapter(适配器...

    JAVA设计模式-day2.pdf

    JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...

    Java面试 java设计模式整理 单例、工厂、策略等 面试使用,学习使用

    4.建造者模式(Builder) 4 5. 原型模式(Protype) 5 6.适配器模式(Adapter) 6 7.装饰模式(Decorator) 6 8.代理模式(Proxy) 7 9.外观模式(Facade) 7 10.桥接模式(Bridge) 7 11.组合模式(Composite) 8 ...

    Java 23种设计模式全归纳

    ### Java 23种设计模式全归纳 #### 资源概述 本资源包汇总了Java中23种经典设计模式的详细介绍和使用示例,旨在帮助开发者系统性地学习和掌握设计模式在软件开发中的应用。... - **建造者模式(Builder

    BuilderPattern:建造者设计模式的例子

    建造者模式 生成器模式的示例 构建器模式使用简单对象并使用逐步方法来构建复杂对象。 这种设计模式属于创建模式,因为该模式提供了创建对象的最佳方法之一。 Builder类逐步构建最终对象。 该构建器独立于其他对象...

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式...

    Java设计模式,并加上个人理解

    9. 建造者模式 (Builder Pattern) 10. 原型模式 (Prototype Pattern) 11. 组合模式 (Composite Pattern) 12. 装饰者模式 (Decorator Pattern) 13. 访问者模式 (Visitor Pattern) 14. 迭代器模式 ...

    23种java版设计模式源码案例.zip

    23种java版设计模式源码案例.zip 0.目录 创建型模式(creational) 简单工厂(simplefactory) 动态工厂(dynamic) 抽象工厂(abstract) 单例模式(singleton) 建造者模式(builder) 原型模式(prototype) 结构型模式...

    java设计模式源码-DesignPattern:设计模式(Java实现源码)

    建造者模式(builderPattern) 原型模式(prototypePattern) 适配器模式(adapterPattern) 桥接模式(bridgePattern) 过滤器模式(filterPattern) 组合模式(compositePattern) 装饰器模式(decoratorPattern) 外观模式...

    Java中的design-patterns::open_book:使用通俗易懂的案例,类图,以及配套学习笔记来详解Java的二十种设计模式!

    参考书籍(推荐): 《Java设计模式 - 刘伟》 , 《图解设计模式 - [日]结城浩》 创建型模式 :check_mark:简单工厂模式( Simple Factor Pattern ) :memo: , :check_mark:工厂方法模式( Factory Method Pattern )...

    Java的23种设计模式疯狂Java总结.doc

    Java设计模式〔疯狂Java联盟版〕 目录 1. 设计模式3 1.1 创立型模式4 1.1.1 工厂方法4 1.1.2 抽象工厂6 1.1.3 建造者模式10 1.1.4 单态模式13 1.1.5 原型模式15 1.2 构造型模式17 1.2.1 适配器模式17 1.2.2 桥接模式...

Global site tag (gtag.js) - Google Analytics