• 建造者模式


    [转自恩师wanson]

    优点:

    1:在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同产品对象

    2:每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象,符合开闭原则

    3:可以更加精细地控制产品的创建过程

    缺点:

    1:建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,例如很多组成部分都不相同,不适合使用建造者模式,因此适用范围受到一定的限制

    2:如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,增加系统的理解难度和运行成本。

    使用环境:

    1:需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员变量

    2:需要生成的产品对象的属性相互依赖,需要指定其生成顺序

    3:对象创建过程独立于创建该对象的类

    4:隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品

     1 package com.shanghai.wangson.designpattern;
     2 
     3 /**
     4  * 抽象建造者
     5  */
     6 abstract class Builder {
     7     /**
     8      * 创建产品对象
     9      */
    10     protected Product product=new Product();
    11     public abstract void builderPartA();
    12     public abstract void builderPartB();
    13     public abstract void builderPartC();
    14     /**
    15      * 返回产品对象
    16      */
    17     public Product getResult(){
    18         return product;
    19     }
    20 
    21 }
     1 package com.shanghai.wangson.designpattern;
     2 
     3 /**
     4  * 具体建造者
     5  */
     6 public class ConcreteBuilder extends Builder {
     7     @Override
     8     public void builderPartA() {
     9         product.setPartA("建造partA");
    10     }
    11 
    12     @Override
    13     public void builderPartB() {
    14         product.setPartB("建造partB");
    15     }
    16 
    17     @Override
    18     public void builderPartC() {
    19         product.setPartC("建造partC");
    20     }
    21 }
     1 package com.shanghai.wangson.designpattern;
     2 
     3 /**
     4  * 指挥者
     5  */
     6 public class Director {
     7     private Builder builder;
     8 
     9     public Director(Builder builder) {
    10         this.builder = builder;
    11     }
    12     /**
    13      * 产品构建与组装方法
    14      */
    15     public Product construct(){
    16         builder.builderPartA();
    17         builder.builderPartB();
    18         builder.builderPartC();
    19         return builder.getResult();
    20     }
    21 }
     1 package com.shanghai.wangson.designpattern;
     2 
     3 /**
     4  * 产品角色
     5  */
     6 public class Product {
     7     private String partA;
     8     private String partB;
     9     private String partC;
    10 
    11     public void setPartA(String partA) {
    12         this.partA = partA;
    13     }
    14 
    15     public void setPartB(String partB) {
    16         this.partB = partB;
    17     }
    18 
    19     public void setPartC(String partC) {
    20         this.partC = partC;
    21     }
    22     public void show(){
    23         /**
    24          * 显示产品的特性
    25          */
    26         System.out.println("超微牌子");
    27     }
    28 }
     1 package com.shanghai.wangson.designpattern;
     2 
     3 public class Driver {
     4     public static void main(String[] args) {
     5         Builder builder=new ConcreteBuilder();
     6         Director director=new Director(builder);
     7         Product product=director.construct();
     8         product.show();
     9     }
    10 }
  • 相关阅读:
    Android为TV端助力:adb查找包名位置
    Android为TV端助力:RecyclerView更新数据时焦点丢失
    一个IOS自动化打包的脚本
    关于IOS免证书真机安装的过程和问题
    使用CoreAnimation 实现相机拍摄照片之后动画效果
    解决路由器无线中继连接不稳定的问题
    解决 an app id with identifier is not available. please enter a different string. xcode 7.3
    CoreText 关键性常用函数说明
    解决Xcode 7 http无法使用的问题
    解决IOS9 下在App中无法打开其他应用的问题
  • 原文地址:https://www.cnblogs.com/wq-9/p/10256975.html
Copyright © 2020-2023  润新知