建造者模式(生成器模式)
1.将复杂的对象的构建与其表示分离,使同样的构建过程可以有不同的表示
代码如下
//父类抽象,采用模板方法模式,定义一系列算法,抽象,定义一模板,由sequence 动态决定算法是否执行//子类将继承该类并实现3个算法abstract class design_mode_Builder_Pattern_Model{private ArrayList<String> sequence = new ArrayList<String>();protected abstract void design_mode_Builder_Pattern_Model_MethodA();protected abstract void design_mode_Builder_Pattern_Model_MethodB();protected abstract void design_mode_Builder_Pattern_Model_MethodC(); final public void setSequence(ArrayList<String> sequence){ this.sequence = sequence;} //定义的模板方法final public void design_mode_Builder_Pattern_Model_Method_transfer (){for(int i=0;i<this.sequence.size();i++){String actionName = this.sequence.get(i); if (actionName == "MethodA" ){this.design_mode_Builder_Pattern_Model_MethodA();}else if (actionName == "MethodB" ){this.design_mode_Builder_Pattern_Model_MethodB();} else if (actionName == "MethodC" ){this.design_mode_Builder_Pattern_Model_MethodC();}else {System.out.println("wrong method");}}}} // 子类1class design_mode_Builder_Pattern_Model_class_1 extends design_mode_Builder_Pattern_Model{protected void design_mode_Builder_Pattern_Model_MethodA(){System.out.println("design_mode_Builder_Pattern_Model_class_1 design_mode_Builder_Pattern_Model_MethodA");}protected void design_mode_Builder_Pattern_Model_MethodB(){ System.out.println("design_mode_Builder_Pattern_Model_class_1 design_mode_Builder_Pattern_Model_MethodB");}protected void design_mode_Builder_Pattern_Model_MethodC(){ System.out.println("design_mode_Builder_Pattern_Model_class_1 design_mode_Builder_Pattern_Model_MethodC");}} // 子类2class design_mode_Builder_Pattern_Model_class_2 extends design_mode_Builder_Pattern_Model{protected void design_mode_Builder_Pattern_Model_MethodA(){System.out.println("design_mode_Builder_Pattern_Model_class_2 design_mode_Builder_Pattern_Model_MethodA");}protected void design_mode_Builder_Pattern_Model_MethodB(){ System.out.println("design_mode_Builder_Pattern_Model_class_2 design_mode_Builder_Pattern_Model_MethodB");}protected void design_mode_Builder_Pattern_Model_MethodC(){ System.out.println("design_mode_Builder_Pattern_Model_class_2 design_mode_Builder_Pattern_Model_MethodC");}} // 建立抽象建造者类,定义抽象方法执行顺序并返回子类abstract class design_mode_Builder_Pattern_Model_Builder{public abstract void setSequence(ArrayList<String> sequence);public abstract design_mode_Builder_Pattern_Model getdesign_mode_Builder_Pattern_Model();} // 建造者1class design_mode_Builder_Pattern_Model_class_1_Builder extends design_mode_Builder_Pattern_Model_Builder{private design_mode_Builder_Pattern_Model_class_1 getdesign_mode_Builder_Pattern_Model_1 = new design_mode_Builder_Pattern_Model_class_1();//getdesign_mode_Builder_Pattern_Model_1 =public design_mode_Builder_Pattern_Model getdesign_mode_Builder_Pattern_Model(){ return this.getdesign_mode_Builder_Pattern_Model_1;}public void setSequence(ArrayList<String> sequence){this.getdesign_mode_Builder_Pattern_Model_1.setSequence(sequence);}} // 建造者2class design_mode_Builder_Pattern_Model_class_2_Builder extends design_mode_Builder_Pattern_Model_Builder{private design_mode_Builder_Pattern_Model_class_2 getdesign_mode_Builder_Pattern_Model_2 = new design_mode_Builder_Pattern_Model_class_2();public design_mode_Builder_Pattern_Model getdesign_mode_Builder_Pattern_Model(){ return this.getdesign_mode_Builder_Pattern_Model_2;}public void setSequence(ArrayList<String> sequence){this.getdesign_mode_Builder_Pattern_Model_2.setSequence(sequence);}} // 导演类,定义各模型的内部实现等class design_mode_Builder_Pattern_Model_director{private ArrayList<String> sequence = new ArrayList();private design_mode_Builder_Pattern_Model_class_1_Builder model1 = new design_mode_Builder_Pattern_Model_class_1_Builder();private design_mode_Builder_Pattern_Model_class_2_Builder model2 = new design_mode_Builder_Pattern_Model_class_2_Builder();// 构造模型1public design_mode_Builder_Pattern_Model_class_1 getModel1(){this.sequence.clear();this.sequence.add("MethodA");this.sequence.add("MethodB");this.sequence.add("MethodC");this.model1.setSequence(sequence);return (design_mode_Builder_Pattern_Model_class_1)model1.getdesign_mode_Builder_Pattern_Model();}// 构造模型2public design_mode_Builder_Pattern_Model_class_1 getModel1_1(){this.sequence.clear();this.sequence.add("MethodA");this.sequence.add("MethodC");this.model1.setSequence(sequence);return (design_mode_Builder_Pattern_Model_class_1)model1.getdesign_mode_Builder_Pattern_Model();} // 构造模型3public design_mode_Builder_Pattern_Model_class_2 getModel2_1(){this.sequence.clear();this.sequence.add("MethodA");this.sequence.add("MethodC");this.sequence.add("MethodA");this.model2.setSequence(sequence);return (design_mode_Builder_Pattern_Model_class_2)model2.getdesign_mode_Builder_Pattern_Model();} // 构造模型4public design_mode_Builder_Pattern_Model_class_2 getModel2_2(){this.sequence.clear();this.sequence.add("MethodA");this.sequence.add("MethodC");this.model2.setSequence(sequence);return (design_mode_Builder_Pattern_Model_class_2)model2.getdesign_mode_Builder_Pattern_Model();}} // 测试类class design_mode_Builder_Pattern_Model_Client{public void design_mode_Builder_Pattern_Model_Client_Test(){design_mode_Builder_Pattern_Model_director director = new design_mode_Builder_Pattern_Model_director(); // 第1个构造 for (int i=0;i<5 ;i++ ) { director.getModel1().design_mode_Builder_Pattern_Model_Method_transfer(); } // 第2个构造 for (int i=0;i<5 ;i++ ) { director.getModel1_1().design_mode_Builder_Pattern_Model_Method_transfer(); } // 第3个构造 for (int i=0;i<5 ;i++ ) { director.getModel2_1().design_mode_Builder_Pattern_Model_Method_transfer(); } // 第4个构造 for (int i=0;i<5 ;i++ ) { director.getModel2_2().design_mode_Builder_Pattern_Model_Method_transfer(); }}}
?