58网站怎么样做效果会更好有哪些做海岛的网站
58网站怎么样做效果会更好,有哪些做海岛的网站,北京和君网站建设,长沙建站网模板方法模式
1 模板方法模式介绍
模板方法模式(template method pattern)原始定义是#xff1a;在操作中定义算法的框架#xff0c;将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。
模板方法中的算法可以理解为广义上的业务逻辑…模板方法模式
1 模板方法模式介绍
模板方法模式(template method pattern)原始定义是在操作中定义算法的框架将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。
模板方法中的算法可以理解为广义上的业务逻辑,并不是特指某一个实际的算法.定义中所说的算法的框架就是模板, 包含算法框架的方法就是模板方法. 例如: 我们去医院看病一般要经过以下4个流程挂号、取号、排队、医生问诊等其中挂号、 取号 、排队对每个病人是一样的可以在父类中实现但是具体医生如何根据病情开药每个人都是不一样的所以开药这个操作可以延迟到子类中实现。 模板方法模式是一种基于继承的代码复用技术,它是一种类行为模式. 模板方法模式其结构中只存在父类与子类之间的继承关系.
模板方法的作用主要是提高程序的复用性和扩展性:
复用指的是,所有的子类可以复用父类中提供的模板方法代码扩展指的是,框架通过模板模式提供功能扩展点,让框架用户可以在不修改框架源码的情况下,基于扩展点定制化框架的功能.
2 模板方法模式原理
模板方法模式的定位很清楚就是为了解决算法框架这类特定的问题同时明确表示需要使用继承的结构。 模板方法Template Method模式包含以下主要角色
抽象父类定义一个算法所包含的所有步骤并提供一些通用的方法逻辑。具体子类继承自抽象父类根据需要重写父类提供的算法步骤中的某些步骤。
抽象类Abstract Class负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。 模板方法定义了算法的骨架按某种顺序调用其包含的基本方法。 基本方法是实现算法各个步骤的方法是模板方法的组成部分。基本方法又可以分为三种 抽象方法(Abstract Method) 一个抽象方法由抽象类声明、由其具体子类实现。 具体方法(Concrete Method) 一个具体方法由一个抽象类或具体类声明并实现其子类可以进行覆盖也可以直接继承。 钩子方法(Hook Method) 在抽象类中已经实现包括用于判断的逻辑方法和需要子类重写的空方法两种。 一般钩子方法是用于判断的逻辑方法这类方法名一般为isXxx返回值类型为boolean类型。
3 模板方法模式实现
UML类图对应的代码实现
/*** 抽象父类**/
public abstract class AbstractClassTemplate {void step1(String key){System.out.println(在模板类中 - 执行步骤1);if(step2(key)){step3();}else{step4();}step5();}boolean step2(String key){System.out.println(在模板类中 - 执行步骤2);if(x.equals(key)){return true;}return false;}abstract void step3();abstract void step4();void step5(){System.out.println(在模板类中 - 执行步骤5);}void run(String key){step1(key);}}public class ConcreteClassA extends AbstractClassTemplate{Overridevoid step3() {System.out.println(在子类A中 - 执行步骤 3);}Overridevoid step4() {System.out.println(在子类A中 - 执行步骤 4);}
}public class ConcreteClassB extends AbstractClassTemplate {Overridevoid step3() {System.out.println(在子类B中 - 执行步骤 3);}Overridevoid step4() {System.out.println(在子类B中 - 执行步骤 4);}
}public class Test01 {public static void main(String[] args) {AbstractClassTemplate concreteClassA new ConcreteClassA();concreteClassA.run();System.out.println();AbstractClassTemplate concreteClassB new ConcreteClassB();concreteClassB.run(x);}
}// 输出结果
在模板类中 - 执行步骤1
在模板类中 - 执行步骤2
在子类A中 - 执行步骤 4
在模板类中 - 执行步骤5在模板类中 - 执行步骤1
在模板类中 - 执行步骤2
在子类B中 - 执行步骤 3
在模板类中 - 执行步骤54 模板方法模式应用实例
P2P公司的借款系统中有一个利息计算模块,利息的计算流程是这样的:
用户登录系统,登录时需要输入账号密码,如果登录失败(比如用户密码错误),系统需要给出提示如果用户登录成功,则根据用户的借款的类型不同,使用不同的利息计算方式进行计算系统需要显示利息.
/*** 账户抽象类**/
public abstract class Account {//step1 具体方法-验证用户信息是否正确public boolean validate(String account,String password){System.out.println(账号: account ,密码: password);if(account.equalsIgnoreCase(tom) password.equalsIgnoreCase(123456)){return true;}else{return false;}}//step2 抽象方法-计算利息public abstract void calculate();//step3 具体方法-显示利息public void display(){System.out.println(显示利息!);}//模板方法public void handle(String account,String password){if(!validate(account,password)){System.out.println(账户或密码错误!!);return;}calculate();display();}
}/*** 借款一个月**/
public class LoanOneMonth extends Account{Overridepublic void calculate() {System.out.println(借款周期30天,利率为10%!);}
}/*** 借款七天**/
public class LoanSevenDays extends Account{Overridepublic void calculate() {System.out.println(借款周期7天,无利息!仅收取贷款金额1%的服务费!);}Overridepublic void display() {System.out.println(七日内借款无利息!);}}public class Client {public static void main(String[] args) {Account a1 new LoanSevenDays();a1.handle(tom,12345);System.out.println();Account a2 new LoanOneMonth();a2.handle(tom,123456);}
}5 模板方法模式总结
优点 在父类中形式化的定义一个算法,而由它的子类来实现细节处理,在子类实现详细的处理代码时,并不会改变父类算法中步骤的执行顺序. 模板方法可以实现一种反向的控制结构,通过子类覆盖父类的钩子方法,来决定某一个特定步骤是否需要执行 在模板方法模式中可以通过子类来覆盖父类的基本方法,不同的子类可以提供基本方法的不同实现,更换和增加新的子类很方便,符合单一职责原则和开闭原则.
缺点
对每个不同的实现都需要定义一个子类这会导致类的个数增加系统更加庞大设计也更加抽象。父类中的抽象方法由子类实现子类执行的结果会影响父类的结果这导致一种反向的控制结构它提高了代码阅读的难度。
模板方法模式的使用场景一般有
多个类有相同的方法并且逻辑可以共用时将通用的算法或固定流程设计为模板在每一个具体的子类中再继续优化算法步骤或流程步骤时重构超长代码时发现某一个经常使用的公有方法。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92494.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!