建造者模式简介
- 模式属于创立型模式,它提供了一种创建对象的最佳形式。
- 应用多个简略的对象一步一步构建成一个简单的对象。
- 一个Builder类会一步一步结构最终的对象。该Builder类是独立于其余对象的。
指挥者模式
产品类Product
//产品public class Product { private String one; private String two; private String three; public String getOne() { return one; } public void setOne(String one) { this.one = one; } public String getTwo() { return two; } public void setTwo(String two) { this.two = two; } public String getThree() { return three; } public void setThree(String three) { this.three = three; } @Override public String toString() { return "Product{" + "one='" + one + '\'' + ", two='" + two + '\'' + ", three='" + three + '\'' + '}'; }}
抽象类Builder
//形象的建造者public abstract class Builder { abstract void one();//第一步工序 abstract void two();//第二步工序 abstract void three();//第三步工序 abstract Product getProduct();//竣工,失去产品}
子类Worker
//具体的建造者:工人public class Worker extends Builder { private Product product; public Worker() { product = new Product(); } @Override void one() { product.setOne("第一步工序"); System.out.println("第一步工序"); } @Override void two() { product.setTwo("第二步工序"); System.out.println("第二步工序"); } @Override void three() { product.setThree("第三步工序"); System.out.println("第三步工序"); } @Override Product getProduct() { return product; }}
指挥者类
//指挥者public class Director { //指挥工人生成产品 public Product build(Builder builder){ builder.one(); builder.two(); builder.three(); return builder.getProduct(); }}
测试类
public class Test { public static void main(String[] args) { //指挥者 Director director = new Director(); //指挥工人生产产品 Product product = director.build(new Worker()); System.out.println(product); /** * 输入后果: * 第一步工序 * 第二步工序 * 第三步工序 * Product{one='第一步工序', two='第二步工序', three='第三步工序'} */ }}
测试后果
第一步工序第二步工序第三步工序Product{one='第一步工序', two='第二步工序', three='第三步工序'}
外部类模式
产品类Product
//产品public class Product { private String one = "第一步工序"; private String two = "第二步工序"; private String three = "第三步工序"; public String getOne() { return one; } public void setOne(String one) { this.one = one; } public String getTwo() { return two; } public void setTwo(String two) { this.two = two; } public String getThree() { return three; } public void setThree(String three) { this.three = three; } @Override public String toString() { return "Product{" + "one='" + one + '\'' + ", two='" + two + '\'' + ", three='" + three + '\'' + '}'; }}
抽象类Builder
//形象的建造者public abstract class Builder { abstract Builder one(String mes);//第一步工序 abstract Builder two(String mes);//第二步工序 abstract Builder three(String mes);//第三步工序 abstract Product getProduct();//竣工,失去产品}
子类Worker
//具体的建造者:工人public class Worker extends Builder { private Product product; public Worker() { product = new Product(); } @Override Builder one(String mes) { product.setOne(mes); return this; } @Override Builder two(String mes) { product.setTwo(mes); return this; } @Override Builder three(String mes) { product.setThree(mes); return this; } @Override Product getProduct() { return product; }}
测试类
public class Test { public static void main(String[] args) { //工人 Worker worker = new Worker(); //生产产品 Product product = worker.getProduct(); System.out.println(product.toString()); /** * 输入后果: * Product{one='第一步工序', two='第二步工序', three='第三步工序'} */ //链式编程 product = worker.one("第一步额定工序").three("提前第三步工序").getProduct(); System.out.println(product); /** * 输入后果: * Product{one='第一步额定工序', two='第二步工序', three='提前第三步工序'} */ }}
测试后果
Product{one='第一步工序', two='第二步工序', three='第三步工序'}Product{one='第一步额定工序', two='第二步工序', three='提前第三步工序'}