zoukankan      html  css  js  c++  java
  • 设计模式05 建造者模式

    建造者模式(Builder)定义:将一个复杂对象的构造与其表示分离,使同样的构造过程可以创建不同的表示。它将一个复杂的对象分解为多个简单对象,然后一步一步构建这个对象。所构造的对象的组成部分(数量、顺序)不变,而每一个组成部分的具体内容是可变的。

    建造者模式的优点:

    1、各个具体的建造者相互独立。

    2、调用者不需要知道所创建的对象的内部细节。

    但是使用建造这模式,必须满足所创建的对象的“各组成部分相同”,这个前提条件。

    抽象建造者及其实现类:

     1 public abstract class Builder {
     2     protected Product product = new Product();
     3 
     4     public abstract void buildPartA();
     5 
     6     public abstract void buildPartB();
     7 
     8     public abstract void buildPartC();
     9 
    10     public Product getResult() {
    11         return product;
    12     }
    13 }
    14 
    15 public class ConcreteBuilderA extends Builder {
    16     @Override
    17     public void buildPartA() {
    18         // TODO Auto-generated method stub
    19         product.setPartA("A->A");
    20     }
    21 
    22     @Override
    23     public void buildPartB() {
    24         // TODO Auto-generated method stub
    25         product.setPartB("A->B");
    26     }
    27 
    28     @Override
    29     public void buildPartC() {
    30         // TODO Auto-generated method stub
    31         product.setPartC("A->C");
    32     }
    33 }
    34 
    35 public class ConcreteBuilderB extends Builder {
    36     @Override
    37     public void buildPartA() {
    38         // TODO Auto-generated method stub
    39         product.setPartA("B->A");
    40     }
    41 
    42     @Override
    43     public void buildPartB() {
    44         // TODO Auto-generated method stub
    45         product.setPartB("B->B");
    46     }
    47 
    48     @Override
    49     public void buildPartC() {
    50         // TODO Auto-generated method stub
    51         product.setPartC("B->C");
    52     }
    53 }

    指挥者(对建造者发出命令的):

     1 public class Director {
     2     private Builder builder;
     3 
     4     public Director(Builder builder) {
     5         this.builder = builder;
     6     }
     7    //控制建造顺序
     8     public Product construct() { 
    9
    this.builder.buildPartA(); 10 this.builder.buildPartB(); 11 this.builder.buildPartC(); 12 return this.builder.getResult(); 13 } 14 }

    产品:

     1 public class Product {
     2     private String partA;
     3     private String partB;
     4     private String partC;
     5 
     6     public void setPartA(String partA) {
     7         this.partA = partA;
     8     }
     9 
    10     public void setPartB(String partB) {
    11         this.partB = partB;
    12     }
    13 
    14     public void setPartC(String partC) {
    15         this.partC = partC;
    16     }
    17 
    18     public void show() {
    19         System.out.println(this.partA + "|" + this.partB + "|" + this.partC);
    20     }
    21 }

    调用者:

     1 public class Client {
     2     /*
     3      * 产品都是由多个部件构成的,各个部件可以灵活选择,但其创建步骤都大同小异
     4      */
     5     public static void main(String[] args) {
     6         Builder builder;
     7         //扩展点
     8         builder = new ConcreteBuilderA();
     9         //切换到B
    10         //builder = new ConcreteBuilderB();
    11         
    12         //稳定代码
    13         Director director = new Director(builder);
    14         
    15         //创建模式,最终得到的对象
    16         Product product = director.construct();
    17         product.show();
    18     }
    19 }

    执行结果:

  • 相关阅读:
    MFC--响应鼠标和键盘操作
    c/C++二进制运算符
    MFC-简单的函数使用
    mfc学习之路--如何删除通过控件新增的变量
    标准BST二叉搜索树写法
    Spring4.1新特性——Spring MVC增强
    浅析JSONP-解决Ajax跨域访问问题
    关于jquery跨域请求方法
    解决jsp下载文件,迅雷下载路径不显示文件名称的问题
    REST风格URL
  • 原文地址:https://www.cnblogs.com/asenyang/p/12111029.html
Copyright © 2011-2022 走看看