作者:x将臣x | 来源:互联网 | 2023-10-11 08:30
模式分析是一种基于继承的代码复用技术将一些复杂流程的实现步骤封装在一系列基本方法中在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来
模式分析是一种基于继承的代码复用技术将一些复杂流程的实现步骤封装在一系列基本方法中在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果.
public void template() {open();display();if(isPrint()) {print();}
}
public boolean isPrint() {return true;
}
public abstract class AbstractClass {public void templateMethod() {primitiveOperation1();primitiveOperation2();primitiveOperation3();
}public void primitiveOperation1() {}public abstract void primitiveOperation2(); public void primitiveOperation3() { }
}
public class ConcreteClass extends AbstractClass {public void primitiveOperation2() {}public void primitiveOperation3() {}
}
代码:
银行业务办理流程:实例说明
在银行办理业务时,一般都包含几个基本步骤,首先需要取号排队,然后办理具体业务,最后需要对银行工作人员进行评分。无论具体业务是取款、存款还是转账,其基本流程都一样。现使用模板方法模式模拟银行业务办理流程。
BankTemplateMethod.java
package templatemethod;public abstract class BankTemplateMethod {public void takeNumber() {System.out.println("取号排队,");}public abstract void transact();public boolean WantsInvest() {return true;}public void evaluate() {System.out.println("反馈评分,");}public void invest() {System.out.println("资询理财");}public void process() {this.takeNumber();this.transact();this.evaluate();if(WantsInvest()) {invest();}}
}
Client.java
package templatemethod;public class Client {public static void main(String[] args) {BankTemplateMethod bank;bank=(BankTemplateMethod)XMLUtil.getBean();bank.process();System.out.println("-------------------");}}
package templatemethod;public class Deposit extends BankTemplateMethod{public void transact() {System.out.println("存款");}}
package templatemethod;public class Transfer extends BankTemplateMethod{public void transact() {System.out.println("转账");}
}
package templatemethod;public class Withdraw extends BankTemplateMethod{public void transact() {System.out.println("取款");}
}
package templatemethod;import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;
public class XMLUtil
{
public static Object getBean(){try{DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = dFactory.newDocumentBuilder();Document doc; doc = builder.parse(new File("Templatemethodconfig.xml")); NodeList nl = doc.getElementsByTagName("className");Node classNode=nl.item(0).getFirstChild();String cName=classNode.getNodeValue();Class c=Class.forName(cName);Object obj=c.newInstance();return obj;} catch(Exception e){e.printStackTrace();return null;}}
}
https://github.com/MeetNiceMe/java-strategy