设计模式(5)----创建者模式

  1. 简介:
    1. 创建者模式的核心思想是将一个"复杂对象的构建算法"与它的"部件及组装方式"分离,使得构件算法和组装方式可以独立应对变化;复用同样的构建算法可以创建不同的表示,不同的构建过程可以复用相同的部件组装方式。
  2. 定义:
    1. 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
  3. 创建者模式的UML图:

  4. 组成:
    1. 建造者(Builder):对复杂对象的创建过程加以抽象,给出一个抽象接口,以规范产品对象的各个组成部分的建造。
    2. 具体创建者(ConcreateBuilder):实现Builder接口,针对不同的业务逻辑,具体化复杂对象的各个部分的创建。在建造过程完成后,提供产品的实例
    3. 指导者(Dierctor):调用具体建造者来创建复杂对象的各个部分,在指导者中不设计具体产品的信息,只负责保证对象各部分完整创建或者按某种顺序创建。
    4. 产品(Product):要创建的复杂对象,一般来说包含多个部分。
  5. 步骤:
    1. 定义一个具体产品类

 

package com.lvsling.bulider;

/**

* Product----相当于建造者模式中的产品

* @author Administrator

*

*/

public class Robust {

private String head;

 

private String body;

 

public String getHead() {

return head;

}

 

public void setHead(String head) {

this.head = head;

}

 

public String getBody() {

return body;

}

 

public void setBody(String body) {

this.body = body;

}

 

@Override

public String toString() {

return "Robust{" +

"head='" + head + '\'' +

", body='" + body + '\'' +

'}';

}

}

 

  1. 定义建造者的创建过程

     

 

package com.lvsling.bulider;

/**

* Builder----建造者

* @author Administrator

*

*/

public interface RobustBuilder {

 

void init();

 

void buildHead(String head);

 

void buildBody(String body);

 

Robust getRobust();

}

 

  1. 定义一个指导者

     

 

package com.lvsling.bulider;

/**

* Director----指导者

* @author Administrator

*

*/

public class RobustDirector {

 

private RobustBuilder robustBuilder;

 

public RobustDirector(RobustBuilder robustBuilder){

this.robustBuilder = robustBuilder;

}

 

public Robust buildRobust(String head, String body){

robustBuilder.init();

robustBuilder.buildHead(head);

robustBuilder.buildBody(body);

return robustBuilder.getRobust();

}

}

 

  1. 创建具体的创造者

     

 

package com.lvsling.bulider;

 

/**

* ConcreateBuilder----具体创建者。

* @author Administrator

*

*/

public class MyRobustBuilder implements RobustBuilder {

 

private Robust robust;

 

public void init() {

robust = new Robust();

}

 

public void buildHead(String head) {

robust.setHead(head);

}

 

public void buildBody(String body) {

robust.setBody(body);

}

 

public Robust getRobust() {

return robust;

}

}

 

  1. 编写测试类

     

 

package com.lvsling.bulider;

/**

* 测试类

* @author Administrator

*

*/

public class Client {

    public static void main(String[] args) {

        MyRobustBuilder myRobustBuilder = new MyRobustBuilder();

RobustDirector robustDirector = new RobustDirector(myRobustBuilder);

Robust robust = robustDirector.buildRobust("玩具头", "玩具体");

System.out.println(robust);

    }

 

}

 

 

  1. 结果

 

Robust{head='玩具头', body='玩具体'}

 

  1. 优点:
    1. 建造模式的使用使得产品的内部表象可以独立地变化。使用建造模式可以使客户端不必知道产品内部组成的细节。
    2. 每一个Builder都相对独立,而与其他的Builder无关。
    3. 模式所建造的最终产品更易于控制。
  2. 缺点:
    1. 建造者模式的"加工工艺"是暴露的,这样使得建造者模式更加灵活,也使得工艺变得对客户不透明。
  3. 应用场景:
    1. 需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
    2. 隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。
  4. 总结:
    1. 以上写了创建者模式,我个人对创建者模式的理解是,它是一点一点的创造出一个复杂的产品,这个产品的组装过程就发生在创建者角色内部,建造者的客户端拿到的是一个完整的加工后的产品。
posted @ 2018-02-26 17:50  lvsling  阅读(2019)  评论(0编辑  收藏  举报