设计模式(5)----创建者模式
- 简介:
- 创建者模式的核心思想是将一个"复杂对象的构建算法"与它的"部件及组装方式"分离,使得构件算法和组装方式可以独立应对变化;复用同样的构建算法可以创建不同的表示,不同的构建过程可以复用相同的部件组装方式。
- 定义:
- 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
- 创建者模式的UML图:
- 组成:
- 建造者(Builder):对复杂对象的创建过程加以抽象,给出一个抽象接口,以规范产品对象的各个组成部分的建造。
- 具体创建者(ConcreateBuilder):实现Builder接口,针对不同的业务逻辑,具体化复杂对象的各个部分的创建。在建造过程完成后,提供产品的实例
- 指导者(Dierctor):调用具体建造者来创建复杂对象的各个部分,在指导者中不设计具体产品的信息,只负责保证对象各部分完整创建或者按某种顺序创建。
- 产品(Product):要创建的复杂对象,一般来说包含多个部分。
- 步骤:
- 定义一个具体产品类
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 + '\'' + '}'; } } |
- 定义建造者的创建过程
package com.lvsling.bulider; /** * Builder----建造者 * @author Administrator * */ public interface RobustBuilder {
void init();
void buildHead(String head);
void buildBody(String body);
Robust getRobust(); } |
- 定义一个指导者
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(); } } |
- 创建具体的创造者
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; } } |
- 编写测试类
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); }
}
|
- 结果
Robust{head='玩具头', body='玩具体'} |
- 优点:
- 建造模式的使用使得产品的内部表象可以独立地变化。使用建造模式可以使客户端不必知道产品内部组成的细节。
- 每一个Builder都相对独立,而与其他的Builder无关。
- 模式所建造的最终产品更易于控制。
- 缺点:
- 建造者模式的"加工工艺"是暴露的,这样使得建造者模式更加灵活,也使得工艺变得对客户不透明。
- 应用场景:
- 需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
- 隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。
- 总结:
- 以上写了创建者模式,我个人对创建者模式的理解是,它是一点一点的创造出一个复杂的产品,这个产品的组装过程就发生在创建者角色内部,建造者的客户端拿到的是一个完整的加工后的产品。