zoukankan      html  css  js  c++  java
  • 读书笔记_java设计模式深入研究 第四章 生成器模式 (建造者模式) Builder

      1,生成器的模式的意图在于将一个复杂的构建与其标识相互分离,是的同样的构建过程可以创建不同的表示。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成不同的内部表象的产品。

    2,生成器模式UML图:

    -1,建造者IBuilder角色:给出一个抽象接口,以规范产品对象各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。可以在接口中只定义一个总的建造方法,再在子类总实现。这样子可以实现操作的隔离。
    -2,具体建造者Builder角色:此角色实现建造者接口,此角色主要完成IBuilder中的各个接口,在各个建造步骤完成后,提供一个组合方法,返回产品实例。
    -3,指导者Director角色:此角色调用具体建造者以创建产品对象。
    -4,产品Product角色:对应业务产品。
    3,具体代码如下:
    1. /**
       
       *
       
       * @(#) IBuilder.java
       
       * @Package pattern.chp04.builder
       
       * 
       
       * Copyright © JING Corporation. All rights reserved.
       
       *
       
       */
       
       
       
      package pattern.chp04.builder;
       
       
       
      /**
       
       *  类描述:建造者接口
       
       * 
       
       *  @author:  Jing
       
       *  @version  $Id: Exp$ 
       
       *
       
       *  History:  Dec 19, 2014 11:11:16 AM   Jing   Created.
       
       *           
       
       */
       
      public interface IBuilder {
       
      /**
       
       * 
       
       * 方法说明:生成产品对象
       
       *
       
       * Author:       Jing                
       
       * Create Date:   Dec 19, 2014 11:11:56 AM
       
       *
       
       * @return
       
       * @return Product
       
       */
       
      public Product create();
       
      }
       
      /**
       
       *
       
       * @(#) BuildProduct.java
       
       * @Package pattern.chp04.builder
       
       * 
       
       * Copyright © JING Corporation. All rights reserved.
       
       *
       
       */
       
       
       
      package pattern.chp04.builder;
       
       
       
      /**
       
       * 类描述:具体产品生成
       
       * 
       
       * @author: Jing
       
       * @version $Id: Exp$
       
       * 
       
       * History: Dec 19, 2014 11:14:37 AM Jing Created.
       
       * 
       
       */
       
      public class BuildProduct implements IBuilder {
       
       
       
      Product model = new Product();
       
       
       
      public Product create() {
       
       
       
      createScreen();
       
      createMainframe();
       
      return model;
       
      }
       
       
       
      /**
       
       * 
       
       * 方法说明:生成屏幕
       
       * 
       
       * Author: Jing Create Date: Dec 19, 2014 11:15:28 AM
       
       * 
       
       * @return void
       
       */
       
      public void createScreen() {
       
       
       
      model.setScreen("Screen Product");
       
      }
       
       
       
      /**
       
       * 
       
       * 方法说明:生成主机
       
       * 
       
       * Author: Jing Create Date: Dec 19, 2014 11:16:12 AM
       
       * 
       
       * @return void
       
       */
       
      public void createMainframe() {
       
       
       
      model.setMainframe("Mainframe Product");
       
      }
       
       
       
      }
       
      /**
       
       *
       
       * @(#) Product.java
       
       * @Package pattern.chp04.builder
       
       * 
       
       * Copyright © JING Corporation. All rights reserved.
       
       *
       
       */
       
       
       
      package pattern.chp04.builder;
       
       
       
      /**
       
       * 类描述:产品类,电脑
       
       * 
       
       * @author: Jing
       
       * @version $Id: Exp$
       
       * 
       
       * History: Dec 19, 2014 11:12:12 AM Jing Created.
       
       * 
       
       */
       
      public class Product {
       
      /**
       
       * 屏幕
       
       */
       
      private String screen;
       
      /**
       
       * 主机
       
       */
       
      private String mainframe;
       
       
       
      /**
       
       * @return the screen
       
       */
       
      public String getScreen() {
       
      return screen;
       
      }
       
       
       
      /**
       
       * @param screen
       
       *            the screen to set
       
       */
       
      public void setScreen(String screen) {
       
      this.screen = screen;
       
      }
       
       
       
      /**
       
       * @return the mainframe
       
       */
       
      public String getMainframe() {
       
      return mainframe;
       
      }
       
       
       
      /**
       
       * @param mainframe
       
       *            the mainframe to set
       
       */
       
      public void setMainframe(String mainframe) {
       
      this.mainframe = mainframe;
       
      }
       
       
       
      }
       
      /**
       
       *
       
       * @(#) Director.java
       
       * @Package pattern.chp04.builder
       
       * 
       
       * Copyright © JING Corporation. All rights reserved.
       
       *
       
       */
       
       
       
      package pattern.chp04.builder;
       
       
       
      /**
       
       *  类描述:产品生成指导类
       
       * 
       
       *  @author:  Jing
       
       *  @version  $Id: Exp$ 
       
       *
       
       *  History:  Dec 19, 2014 11:17:07 AM   Jing   Created.
       
       *           
       
       */
       
      public class Director {
       
       
       
      private IBuilder builder;
       
       
       
      public Director(IBuilder builder) {
       
       
       
      this.builder = builder;
       
      }
       
      /**
       
       * 
       
       * 方法说明:构建产品
       
       *
       
       * Author:       Jing                
       
       * Create Date:   Dec 19, 2014 11:18:31 AM
       
       *
       
       * @return
       
       * @return Product
       
       */
       
      public Product build(){
       
      return builder.create();
       
      }
       
      }

    4, 在什么情况下使用建造者模式

    以下情况应当使用建造者模式:

    1、 需要生成的产品对象有复杂的内部结构。
    2、 需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序。
    3、 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。

    使用建造者模式主要有以下效果:

    1、 建造模式的使用使得产品的内部表象可以独立的变化。使用建造者模式可以使客户端不必知道产品内部组成的细节。
    2、 每一个Builder都相对独立,而与其它的Builder无关。
    3、 模式所建造的最终产品更易于控制。


     

    欢迎转载,但转载请注明原文链接[博客园: http://www.cnblogs.com/jingLongJun/]
    [CSDN博客:http://blog.csdn.net/mergades]。
    如相关博文涉及到版权问题,请联系本人。
  • 相关阅读:
    Ubuntu
    SSH
    Markdown
    Mac OS 上的一些骚操作
    Linux Bash
    JConsole
    IDEA
    Groovy
    Github
    Git
  • 原文地址:https://www.cnblogs.com/jingLongJun/p/4491073.html
Copyright © 2011-2022 走看看