`

java 设计模式--建造者模式

    博客分类:
  • java
阅读更多

Builder 模式 —— 建造者模式(又译成生成器模式的主要功能是构建复杂的产品,它是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

举个例子,打个生产电脑的比方,这里简单一点,假设生产电脑只需要 CUP、内存和显卡,现在需要生产宏基和戴尔两个品牌的电脑,不用设计模式的实现:

Acer.java


import java.util.ArrayList;
import java.util.List;
/**
 * -----------------------------------------
 * @描述  生产宏基笔记本电脑
 * @作者  fancy
 * @邮箱  fancydeepin@yeah.net
 * @日期  2012-8-4 <p>
 * -----------------------------------------
 
*/

public class Acer{

    protected List<String> parts = new ArrayList<String>();
    
    //生产CPU
    public void createCPU() {
        
        parts.add("CUP: Intel 酷睿i3 2350M");
    }


    //生产内存
    public void createMemory() {

        parts.add("内存: 4GB DDR3 1333MHz");
    }


    //生产显卡
    public void createDisplayCard() {

        parts.add("显卡: NVIDIA GeForce GT 520M");
    }

    
    //显示产品信息
    public void show(){
        System.out.print("产品部件信息:");
        for(String part : parts){
            System.out.print(part + "\t");
        }

    }


}



Dell.java


import java.util.ArrayList;
import java.util.List;
/**
 * -----------------------------------------
 * @描述  生产戴尔笔记本电脑
 * @作者  fancy
 * @邮箱  fancydeepin@yeah.net
 * @日期  2012-8-4 <p>
 * -----------------------------------------
 
*/

public class Dell{

    protected List<String> parts = new ArrayList<String>();

    //生产CPU
    public void createCPU() {

        parts.add("CUP: Intel 酷睿i7 3612QM");
    }


    //生产内存
    public void createMemory() {

        parts.add("内存: 8GB DDR3 1600MHz");
    }


    //生产显卡
    public void createDisplayCard() {

        parts.add("显卡: NVIDIA GeForce GT 640M+Intel GMA HD 4000");
    }


    //显示产品信息
    public void show(){
        System.out.print("产品部件信息:");
        for(String part : parts){
            System.out.print(part + "\t");
        }

    }


}



Client.java


/**
 * -----------------------------------------
 * @描述  客户端测试
 * @作者  fancy
 * @邮箱  fancydeepin@yeah.net
 * @日期  2012-8-4 <p>
 * -----------------------------------------
 
*/

public class Client {

    private static Acer acer = new Acer();
    private static Dell dell = new Dell();
    
    public static void main(String[] args){

        /**
         * 宏基
         
*/

        acer.createCPU();
        acer.createMemory();
        acer.createDisplayCard();
        acer.show();
        
        /***************************************/
        System.out.println();
        /***************************************/
        
        /**
         * 戴尔
         
*/

        dell.createCPU();
        dell.createMemory();
        dell.createDisplayCard();
        dell.show();
    }

    
}



仔细观察一下上面的实现,不难发现,不管是生产何种品牌的笔记本,在实现的时候,它们的步骤基本上都是一样的,都是生产电脑相应的部件并添加都电脑里面,在生产不同品牌电脑

的时候,都会重复处理这几个步骤,但是明显的是,这几个步骤都是稳定的或者说是一样的,只是每个步骤的具体实现不一样或者说是变化的,如果将这些变化的部分抽取出来,也就是

说如果将处理过程与具体的步骤的实现分离开来的话,这样就能够复用这些处理过程,而且这样一来就能很容易的做到在不同品牌电脑之间切换生产。

使用 Builder 模式的实现,如图:


Product.java


package pattern.builder;

import java.util.ArrayList;
import java.util.List;
/**
 * -----------------------------------------
 * @描述  抽象产品
 * @作者  fancy
 * @邮箱  fancydeepin@yeah.net
 * @日期  2012-8-5 <p>
 * -----------------------------------------
 
*/

public abstract class Product {

    protected List<String> parts = new ArrayList<String>();
    
    //添加部件
    public void add(String part){
        parts.add(part);
    }


    //显示产品信息
    public void show(){
        System.out.print("产品部件信息:");
        for(String part : parts){
            System.out.print(part + "\t");
        }

    }

}



Acer.java


package pattern.builder;
/**
 * -----------------------------------------
 * @描述  宏基笔记本
 * @作者  fancy
 * @邮箱  fancydeepin@yeah.net
 * @日期  2012-8-5 <p>
 * -----------------------------------------
 
*/

public class Acer extends Product{

    //Do other things here
    
}



Dell.java


package pattern.builder;
/**
 * -----------------------------------------
 * @描述  戴尔笔记本
 * @作者  fancy
 * @邮箱  fancydeepin@yeah.net
 * @日期  2012-8-5 <p>
 * -----------------------------------------
 
*/

public class Dell extends Product{

    //Do other things here
    
}



Builder.java


package pattern.builder;
/**
 * -----------------------------------------
 * @描述  抽象建造者
 * @作者  fancy
 * @邮箱  fancydeepin@yeah.net
 * @日期  2012-8-5 <p>
 * -----------------------------------------
 
*/

public interface Builder {

    //CUP
    public void buildCPU();
    
    //内存
    public void buildMemory();
    
    //显卡
    public void buildDisplayCard ();
    
    //最终产品
    public Product getFinalResult();
    
}



AcerBuilder.java


package pattern.builder;
/**
 * -----------------------------------------
 * @描述  宏基笔记本建造者
 * @作者  fancy
 * @邮箱  fancydeepin@yeah.net
 * @日期  2012-8-5 <p>
 * -----------------------------------------
 
*/

public class AcerBuilder implements Builder {

    private Product product = new Acer();
    
    @Override
    public void buildCPU() {
        
        product.add("CUP: Intel 酷睿i3 2350M");
    }


    @Override
    public void buildMemory() {

        product.add("内存: 4GB DDR3 1333MHz");
    }


    @Override
    public void buildDisplayCard() {

        product.add("显卡: NVIDIA GeForce GT 520M");
    }


    @Override
    public Product getFinalResult() {
        
        return product;
    }


}



DellBuilder.java


package pattern.builder;
/**
 * -----------------------------------------
 * @描述  戴尔笔记本建造者
 * @作者  fancy
 * @邮箱  fancydeepin@yeah.net
 * @日期  2012-8-5 <p>
 * -----------------------------------------
 
*/

public class DellBuilder implements Builder {

    private Product product = new Dell();
    
    @Override
    public void buildCPU() {
        
        product.add("CUP: Intel 酷睿i7 3612QM");
    }


    @Override
    public void buildMemory() {

        product.add("内存: 8GB DDR3 1600MHz");
    }


    @Override
    public void buildDisplayCard() {

        product.add("显卡: NVIDIA GeForce GT 640M+Intel GMA HD 4000");
    }


    @Override
    public Product getFinalResult() {
        
        return product;
    }


}



Director.java


package pattern.builder;
/**
 * -----------------------------------------
 * @描述  产品构建指导者
 * @作者  fancy
 * @邮箱  fancydeepin@yeah.net
 * @日期  2012-8-5 <p>
 * -----------------------------------------
 
*/

public class Director {

    private Builder builder;
    
    public Director(Builder builder){
        this.builder = builder;
    }

    
    public void construct(){
        
        builder.buildCPU();
        builder.buildMemory();
        builder.buildDisplayCard();
    }

}



Client.java


package pattern.builder;
/**
 * -----------------------------------------
 * @描述  客户端测试
 * @作者  fancy
 * @邮箱  fancydeepin@yeah.net
 * @日期  2012-8-5 <p>
 * -----------------------------------------
 
*/

public class Client {

    
private static Builder acerBuilder = new AcerBuilder(),
                                                dellBuilder  
= new DellBuilder();
    
    
public static void main(String[] args){
        
        System.out.print(
"宏基");
        Director director 
= new Director(acerBuilder);
        director.construct();
        Product product 
= acerBuilder.getFinalResult();
        product.show();
        
        
/***************************************/
        System.out.println();
        
/***************************************/
        
        System.out.print(
"戴尔");
        director 
= new Director(dellBuilder);
        director.construct();
        product 
= dellBuilder.getFinalResult();
        product.show();
    }

    
}
分享到:
评论

相关推荐

    java设计模式----建造者模式

    java设计模式------------------------------------建造者模式

    Java设计模式-建造者模式详解

    Java设计模式-建造者模式详解 Java设计模式-建造者模式详解将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。...

    java设计模式---诙谐易懂版

    根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

    JAVA-设计模式-创建型模式-建造者模式

    JAVA-设计模式-创建型模式-建造者模式

    java常用设计模式-建造者模式

    -java常用设计模式-建造者模式是java中的一种创建型设计模式,它允许开发者通过一步一步地构建复杂对象来创建不同类型的对象。 建造者模式的定义 建造者模式是一种创建型设计模式,它允许开发者通过一步一步地构建...

    JAVA设计模式-chm版

    这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解...

    Java设计模式----通俗易懂版

    - 建造者模式:将复杂对象的构建与其表示分离,使同样的构建过程能创建不同的表示。 - 原型模式:通过复制已有对象来创建新对象。 2. 结构型设计模式: - 适配器模式:将两个不兼容的接口转换为可以一起工作的...

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

    建造者模式(Builder)是Java设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露其构造过程。在Android开发中,这种模式尤其有用,因为Android组件如Activity、Fragment等的初始化过程通常...

    java设计模式-图解-附代码

    ### Java设计模式详解 #### 创建型模式 **1.1 工厂方法(Factory Method)** 工厂方法模式定义了一个创建对象的接口,但允许子类决定实例化哪一个类。这使得一个类的实例化可以被推迟到其子类。这种模式在以下...

    java设计模式的应用

    ### Java设计模式的应用 #### 一、引言 在当今快速发展的软件开发领域,Java作为一门功能强大且灵活的语言,不仅拥有丰富的API资源,还能与强大的数据库系统无缝对接。这使得许多开发人员能够以模块化的形式构建...

    讲故事,学(Java)设计模式-建造者模式Java开发Ja

    建造者模式,是Java设计模式中的重要组成部分,它在软件工程中扮演着构造复杂对象的角色。这个模式的主要目的是将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。通过使用建造者模式,我们可以...

    设计模式——建造者模式

    建造者模式是一种结构型设计模式,它允许我们分步骤创建复杂对象,而无需暴露构建过程的内部细节。这种模式在Java编程中非常常见,尤其是在处理需要多种构建方式或需要隔离对象构造过程的场景。 建造者模式的核心...

    JAVA设计模式-原则和23种设计模式归纳总结

    本资源主要介绍了JAVA设计模式的原则和23种设计模式的总结。设计模式是软件设计中的一种解决方案,能够使软件系统更加灵活、可维护和可扩展。本资源首先介绍了设计模式的六大原则,包括单一责任原则、开闭原则、里氏...

    JAVA设计模式-day2.pdf

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

    JAVA设计模式-设计模式公司出品

    8. 建造者模式(BUILDERPATTERN):建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 此外,书中还提到了“六大设计原则”,这是设计模式背后的指导思想,包括: 1. 单一...

    设计模式-Java语言中的应用

    设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...

    Java设计模式-图解-附代码.doc

    - **建造者模式**:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - **单例模式**:保证一个类仅有一个实例,并提供一个全局访问点。 - **原型模式**:通过复制已有对象来创建新对象,...

    java与模式-阎宏

    2. 创建型模式:包括单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。这些模式主要关注对象的创建过程,使得代码更加灵活,易于管理和测试。 3. 结构型模式:包括适配器模式、桥接模式、组合模式、...

    Java设计模式-

    - **建造者模式**:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。适合于构建步骤复杂的对象。 - **单例模式**:保证一个类只有一个实例,并提供全局访问点。常用于配置中心、缓存管理等...

    《Java设计模式》课后答案-刘伟.rar

    《Java设计模式》是刘伟教授的一本关于设计模式的教材,主要面向高等学校的学生和对Java编程有深入兴趣的开发者。设计模式是软件工程中的一种重要思想,它封装了在特定场景下的问题解决方案,可以提高代码的可读性、...

Global site tag (gtag.js) - Google Analytics