zoukankan      html  css  js  c++  java
  • 生成器模式Builder

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11406502.html

    1. 定义
    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    2. 结构图

    Builder:生成器接口,定义创建一个Product对象所需的各个部件的操作。
    ConcreteBuilder:具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法。
    Director:指导者,也被称为导向者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象。
    Product:产品,表示被生成器构建的复杂对象,包含多个部件。 

    3. 本质
    生成器模式的本质:分离整体构建算法和部件构造。
    构建一个复杂的对象,本来就有构建的过程,以及构建过程中具体的实现。生成器模式就是用来分离这两个部分,从而使得程序结构更松散、扩展更容易、复用性更好,同时也会使得代码更清晰,意图更明确。

    虽然在生成器模式的整体构建算法中,会一步一步引导Builder来构建对象,但这并不是说生成器主要就是用来实现分步骤构建对象的。生成器模式的中心还是在于分离整体构建算法和部件构造,而分步骤构建对象不过是整体构建算法的一个简单表现,或者说是一个附带产物。

    4. Code Demo

    Product.java

    1 package org.fool.dp.builder;
    2 
    3 public interface Product {
    4 }

    Builder.java

    1 package org.fool.dp.builder;
    2 
    3 public interface Builder {
    4     void buildPart();
    5 }

    ConcreteBuilder.java

     1 package org.fool.dp.builder;
     2 
     3 public class ConcreteBuilder implements Builder {
     4     private Product product;
     5 
     6     public Product getResult() {
     7         return product;
     8     }
     9 
    10     @Override
    11     public void buildPart() {
    12         System.out.println("build part...");
    13     }
    14 }

    Director.java

     1 package org.fool.dp.builder;
     2 
     3 public class Director {
     4     private Builder builder;
     5 
     6     public Director(Builder builder) {
     7         this.builder = builder;
     8     }
     9 
    10     public void construct() {
    11         builder.buildPart();
    12     }
    13 }

    Client.java

     1 package org.fool.dp.builder;
     2 
     3 public class Client {
     4     public static void main(String[] args) {
     5         ConcreteBuilder builder = new ConcreteBuilder();
     6 
     7         Director director = new Director(builder);
     8 
     9         director.construct();
    10 
    11         Product result = builder.getResult();
    12         System.out.println(result);
    13     }
    14 }
  • 相关阅读:
    OO第二单元架构随笔
    OO第二单元小结
    OO第一单元小结
    OO第四单元总结
    oo第三单元总结
    OO第二单元总结
    OO第一单元总结
    OO第四单元及课程总结
    OO第三单元总结
    OO第二单元总结
  • 原文地址:https://www.cnblogs.com/agilestyle/p/11406502.html
Copyright © 2011-2022 走看看