设为首页 加入收藏

TOP

设计模式-生成器(Builder)(一)
2017-10-16 18:20:17 】 浏览:11200
Tags:设计模式 成器 Builder

 一、概念

  将一个复杂对像的构建与它的表示分离,使得同样的构建过程创建不同的表示,又叫建造模式。

  生成器模式的重心在于分离构建算法和具体的构造实现,从而使得构建算法可以重用。采用不同的构建实现,产生不同的产品。所以生成器模式都会存在以下两个部分:

  a.整体构建算法

  b.部件的构造和产品的装配

 

二、模式动机

  生成器模式主要的功能就是构建复杂的产品,且是细化的、分步骤的构建产品,生成器模式重在一步一步解决构造复杂对像的问题。

三、模式的结构

  

  示意代码:

/**
 * 
* @ClassName: Product 
* @Description: TODO(被构建的产品对像接品) 
* @author beteman6988
* @date 2017年10月1日 上午11:26:33 
*
 */
public interface Product {

}

 

/**
 * 成生器接口,定义构建一个产品对像所需要的各个部件的操作
* @ClassName: Builder 
* @author beteman6988
* @date 2017年10月1日 上午11:28:12 
*
 */
public interface Builder {
    
    /**
     * 构建某个部件
    * @Title: buildPart 
    * @param    
    * @return void    
    * @throws
     */
    public void buildPart();
    
    /**
     * 获取最终生成的产品对像
    * @Title: getResult 
    * @param @return   
    * @return Product    
    * @throws
     */
    public Product getResult();
}

 

public class ConcreteBuilder implements Builder {

    //最终构建的产品
    private Product resultProduct;

    /**
     * 获取最终生成的产品
    * @Title: getResult 
    * @param @return   
    * @return Product    
    * @throws
     */
    @Override
    public Product getResult() {
        return this.resultProduct;
    }

    @Override
    public void buildPart() {
        // TODO Auto-generated method stub

    }

}

 

public class Director {
    
    private Builder builder;


    public Director(Builder builder) {
        this.builder = builder;
    }
    
    /**
     * 指导生成器构建最终的产品对像
    * @Title: construct 
    * @param    
    * @return void    
    * @throws
     */
    public void construct() {
        builder.buildPart();
        builder.getResult();
    }

}

 

  a.Builder:生成器接口,定义创建一个Product对像所需要的各个部件的操作。

  b.ConcreteBuilder:具体生成器的实现,实现各个部件的创建,并负责组装Product对像的各个部件,同时还提供一个让用户获取组装完毕后的产品对像的方法。

  c.Director:指导者,抽像出来的整体构建算法,主要用来使用Builder,以一个统一的过程来构建所需要的Product对像。

  d.Product:产品,表示被生成器构建的复杂对像,包含多个部件。

 

四、模式样例

  以一次台式机组装经历为例,当我们去电脑城组装电脑时,首先导购小妹妹会拿出一张打印好的空白配置报价单,我们在导购小妹的引导下,填写(当然小导购小妹填写)完了报价单后,然后组装工程师小哥就会跟据这个报价单,去仓库领取所有配件,然后就会将所有的配件组装在一起,一个完整的computer就组装好了,最后我们交钱拿电脑走人。

  运用生成器模式对上述过程进行分析:

  a.Product:导购小妹给我们的那个报价单可以说是一台最终computer product的一个抽像,当我们填写完一个一个完整的报价单后,可以说一个具体的compueter已经有了,

   不过目前还是一堆零部件,要想得到一台完整的computer,还需要一个组装的过程。

  b.Builder:我们的组装工程师小哥,跟据不同的具体报价单,都要去仓库忙一翻,要找到所有的部件,可以说只要有报价单,小哥都要将具体产口的每个部件都要找出来,少一个可以说都不行,这个可以说是一个完整电脑每个部件的抽像的建造(只是去仓库的相关位置拿到相关部件)。

  c.ConcreteBuilder:组装工程师小哥跟据具体的报价单,去仓库找到相应的配件,并对每个部件进行处理,该拆封的拆封,该插线的插线,然后依据一定的步骤组装将所有配件组装起来,组装成一台完整的电脑。

  d.Director:电脑的组装可以说有固定的套路,可以说这个套路适应于所有的电脑组装,比如必须先有机箱,然后将主板装到机箱上,然后将cpu装到主板上,步骤不能乱。按这个套路,工程师小哥跟据不同的报价单组装出不同的computer.

   

  代码如下:

public interface CBuilder {


    /**
     * 构建机箱
    * @Title: buildBox 
    * @param    
    * @return void    
    * @throws
     */
    public void buildBox();

    /**
     * 安装主板
    * @Title: buildMBoard 
    * @param    
    * @return void    
    * @throws
     */
    public void buildMBoard();

    /**
     * 安装CPU
    * @Title: buildCpu 
    * @param    
    * @return void    
    * @throws
     */
    public void buildCpu();

    /**
     * 安装内存
    * @Title: buildMemory 
    * @param    
    * @return void    
    * @throws
     */
    public void buildMemory();

    /**
     * 安装硬盘
    * @Title: buildHDisk 
    * @param    
    * @return void    
    * @throws
     */
    public void buildHDisk();

    /**
     * 返回安装完毕的计算机
    * @Title: getComputer 
    * @param @return   
    * @return ComputerA    
    * @throws
     */
    public ComputerA getComputer();
}

 

public class ComputerABuilder implements CBuilder {
    
private ComputerA aComputer=new ComputerA();

    @Override
    public void buildBox() {
        this.aComputer.setBox("MAtx");

    }

    @Override
    public void buildMBoard() {
        this.aComputer.s
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇DesignPattern系列__04里氏替换原.. 下一篇三分钟浅谈TT猫的前端优化

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目