建造模式
建造模式是对象的创建模式,建造模式可以将一个产品的内部表象与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
在这个模式中,有四个角色;
抽象建造者:给出一个抽象接扩口,以规范产品对象的各个组成成分的建造,一般而言,此接口独立于应用程序的商业逻辑,模式中直接创建产品对象的是具体建造者角色,具体建造者类必须实现这个接口所要求的两种方法,一种是建造方法,另一种是返还结构方法,一般而言,产品所包含的零件数目与建造方法的数目相符,换言之,有多少零件,就有多少相应的建造方法;
具体建造者角色:担任这个角色的是与应用程序紧密相关的一些类,他们在应用程序调用下创建产品的实例,这个角色要完成的任务包括:1,实现抽象建造者Builder所声明的接口,给出一步一步地完成创建产品实例的操作。2,在建造过程完成后,提供产品的实例;
导演者角色:担任这个角色的类调用具体建造者角色以创建产品对象。应当指出的是,导演者角色并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者角色;
产品角色:产品是建造中的复杂对象,一般来说,一个系统中会有多于一个的产品类,而且这些产品类并不一定有共同的 接口,而完全可以是不相关联的;
我们可以举一个盖房子工程的例子来说明:我们知道,盖一个房子要的角色有盖房子的各种各样的材料,一个盖房子的工人,还要有一个负责设计的工程师,我们先来说一下各自的特点,作为一个工人,他知道如何去盖厕所,盖大厅,知道怎么具体地使用这些材料,但是,他不具备设计的能力,因为他不会画那些设计图纸,而作为工程师来说,他负责指挥工人去按他所设计的图纸去盖房子,但是他并不知道怎么具体地使用这些材料,因为他不必下工地,没有那些工人的经验老道,这样的话,下次你依然可以用这些相同的材料去盖出不同风格的房子出来,这里还可以有一个房子的主人的角色,他的任务是雇包工头,并给包工头指派了工人,还有材料,然后让包工头自己去负责设计,自己只要最后得到这个房子就可以了。这就是建造者模式。下面是代码;
首先是产品类;
package Build;
public class Product {
public Product() {
// TODO Auto-generated constructor stub
}
private String part1;
private String part2;
public String getPart1() {
return part1;
}
public void setPart1(String part1) {
this.part1 = part1;
}
public String getPart2() {
return part2;
}
public void setPart2(String part2) {
this.part2 = part2;
}
}
建造者抽象类;
package Build;
public interface Builder {
public void buildPart1();
public void buildPart2();
public Product retrieveResult();
}
具体建造者类;
package Build;
public class ConcreteBuilder implements Builder{
public ConcreteBuilder() {
// TODO Auto-generated constructor stub
}
private Product product = new Product();
@Override
public void buildPart1(){
product.setPart1("编号:9527");
}
@Override
public void buildPart2(){
product.setPart2("名称:XXX");
}
@Override
public Product retrieveResult(){
return product;
}
}
导演者类;
package Build;
public class Director {
public Director() {
// TODO Auto-generated constructor stub
}
private Builder builder;
public Director(Builder builder){
this.builder = builder;
}
public void construct(){
builder.buildPart1();
builder.buildPart2();
}
}
客户端类;
package Build;
public class Client {
public Client() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args){
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
director.construct();
Product product = builder.retrieveResult();
System.out.println(product.getPart1());
System.out.println(product.getPart2());
}
}
浙公网安备 33010602011771号