package Create.d.Builder; //業務接口 public interface Tax { void calcTax(); }
package Create.d.Builder; //業務接口 public interface Salary { void calcSalary(); }
package Create.d.Builder; //業務實現類 public class HeBeiTax implements Tax { @Override public void calcTax() { // TODO Auto-generated method stub System.out.println("開始計算河北子公司的稅收!"); } }
package Create.d.Builder; //業務實現類 public class HeBeiSalary implements Salary { @Override public void calcSalary() { // TODO Auto-generated method stub System.out.println("開始計算河北子公司的薪資!"); } }
package Create.d.Builder; //業務實現類 public class GuangDongTax implements Tax { @Override public void calcTax() { // TODO Auto-generated method stub System.out.println("開始計算廣東子公司的稅收!"); } }
package Create.d.Builder; //業務實現類 public class GuangDongSalary implements Salary { @Override public void calcSalary() { // TODO Auto-generated method stub System.out.println("開始計算廣東子公司的薪資!"); } }
package Create.d.Builder; //工廠接口 public interface Factory { Salary createSalary(); Tax createTax(); }
package Create.d.Builder; //業務實現類工廠類 public class HeBeiFactory implements Factory { @Override public Salary createSalary() { // TODO Auto-generated method stub return new HeBeiSalary(); } @Override public Tax createTax() { // TODO Auto-generated method stub return new HeBeiTax(); } }
package Create.d.Builder; //業務實現類工廠類 public class GuangDongFactory implements Factory { @Override public Salary createSalary() { // TODO Auto-generated method stub return new GuangDongSalary(); } @Override public Tax createTax() { // TODO Auto-generated method stub return new GuangDongTax(); } }
package Create.d.Builder; //建立者類 public class Builder { Factory fa; public Builder() { super(); } public Builder(Factory fa) { super(); this.fa = fa; } //封裝業務實現類調用 public void build(){ Salary sa = fa.createSalary(); Tax tax = fa.createTax(); sa.calcSalary(); tax.calcTax(); } }
package Create.d.Builder; //業務調用類 public class Client { public static void main(String[] args) { Builder builder = new Builder(new HeBeiFactory()); builder.build(); builder = new Builder(new GuangDongFactory()); builder.build(); } }
優勢:客戶端再也不負責對象的建立和組裝,而是把這個任務交給具體的建立類和組裝類,只負責對對象的調用。java
缺點: 若是產品之間差別很是大,須要編寫多個建立者類才能實現,此時應考慮使用同工廠模式一同使用,效果更好。ide