网站做兼容需要多少钱,品牌建设年 启动,浙江省和住房建设厅网站,网站源代码下载建造者模式#xff0c;又称生成器模式#xff1a;将一个复杂的构建与其表示相分离#xff0c;使得同样的构建过程可以创建不同的表示。
三个角色#xff1a;建造者、具体的建造者、监工、使用者 建造者角色#xff1a;定义生成实例所需要的所有方法#xff1b; 具体的建…建造者模式又称生成器模式将一个复杂的构建与其表示相分离使得同样的构建过程可以创建不同的表示。
三个角色建造者、具体的建造者、监工、使用者 建造者角色定义生成实例所需要的所有方法 具体的建造者角色实现生成实例所需要的所有方法并且定义获取最终生成实例的方法 监工角色定义使用建造者角色中的方法来生成实例的方法 使用者使用建造者模式。 注意定义中“将一个复杂的构建过程与其表示相分离”表示并不是由建造者负责一切而是由监工负责控制定义一个复杂的构建过程由各个不同的建造者分别负责实现构建过程中所用到的所有构建步骤。不然就无法做到“使得同样的构建过程可以创建不同的表示”这一目标。 建造者角色
public abstract class Builder {public abstract void buildPart1();public abstract void buildPart2();public abstract void buildPart3();
}
监工角色
public class Director { // 将一个复杂的构建过程与其表示相分离private Builder builder; // 针对接口编程而不是针对实现编程public Director(Builder builder) {this.builder builder;}public void setBuilder(Builder builder) {this.builder builder;}public void construct() { // 控制定义一个复杂的构建过程builder.buildPart1();for (int i 0; i 5; i) { // 提示如果想在运行过程中替换构建算法可以考虑结合策略模式。builder.buildPart2();}builder.buildPart3();}
}
具体的建造者角色
/*** 此处实现了建造纯文本文档的具体建造者。* 可以考虑再实现一个建造HTML文档、XML文档或者其它什么文档的具体建造者。* 这样就可以使得同样的构建过程可以创建不同的表示*/
public class ConcreteBuilder1 extends Builder {private StringBuffer buffer new StringBuffer();//假设 buffer.toString() 就是最终生成的产品Overridepublic void buildPart1() {//实现构建最终实例需要的所有方法buffer.append(Builder1 : Part1\n);}Overridepublic void buildPart2() {buffer.append(Builder1 : Part2\n);}Overridepublic void buildPart3() {buffer.append(Builder1 : Part3\n);}public String getResult() {//定义获取最终生成实例的方法return buffer.toString();}
}
客户角色
public class Client {public void testBuilderPattern() {ConcreteBuilder1 b1 new ConcreteBuilder1();//建造者Director director new Director(b1);//监工director.construct();//建造实例(监工负责监督建造者实际建造)String result b1.getResult();//获取最终生成结果System.out.printf(the result is :%n%s, result);}
}