前言:
作为设计模式里面最简单的设计模式之一,却被广泛使用的。作为学习设计模式的开篇真=真是再适合不过了。
这个设计模式之中仅仅使用了继承关系。虽然Java里面因为单继承、多实现的原因不建议过多的使用继承,
模板模式(Template Mode):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。可以使子类可以不改变一个算法的结构 就可以重新定义算法中的某些步骤。
1.优点:
不变的方法写在抽象类里面,子类里没有重复代码,减少了代码的重复。
子类实现算法的细节,有利于算法的扩展。
父类的模板方法来控制子类中的具体实现。这样你在实现子类的时
候,根本不需要对业务流程有太多的了解
2.缺点:
每个不同的实现都需要定义一个子类,这会导致类的个数的增加。
作为设计模式里面最简单的设计模式之一,却被广泛使用的。作为学习设计模式的开篇真=真是再适合不过了。
这个设计模式之中仅仅使用了继承关系。虽然Java里面因为单继承、多实现的原因不建议过多的使用继承,
但是今天通过模板模式的学习还是可以发现继承的很多的优点的存在。对于以后系统设计结构的优化还是很有好处的。
模板模式(Template Mode):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。可以使子类可以不改变一个算法的结构 就可以重新定义算法中的某些步骤。
模板模式中的角色:
抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。
模板模式的实例:
1.先定义抽象类
package testTemplateMode;
/**
* 抽象类(AbstractClass)
* 实现了模板方法,定义了算法的骨架
* @author likexin
*
*/
public abstract class Person {
/**
* 实现了模板方法,定义了整个执行流程的骨架
*/
public final void exam(){
System.out.println( getName() + " sign up");
System.out.println(getSubjects() + " the exam begins ...");
System.out.println( getName() + " the exam is over !!!!");
}
/**
* 以下的方法是根据子类的自身的特性而完成的相应的执行步骤
* @return
*/
protected abstract String getSubjects();
protected abstract String getName();
}
package testTemplateMode;
public class XiaoHong extends Person {
@Override
protected String getSubjects() {
return "Security officer";
}
@Override
protected String getName() {
return "XiaoHong";
}
}
package testTemplateMode;
public class XiaoMing extends Person {
@Override
protected String getSubjects() {
return "Certified Public Accountant";
}
@Override
protected String getName() {
return "XiaoMing";
}
}
package testTemplateMode;
public class Test {
public static void main(String[] args) {
Person person = new XiaoMing();
person.exam();
person = new XiaoHong();
person.exam();
}
}
模式模式优缺点:
1.优点:
不变的方法写在抽象类里面,子类里没有重复代码,减少了代码的重复。
子类实现算法的细节,有利于算法的扩展。
父类的模板方法来控制子类中的具体实现。这样你在实现子类的时
候,根本不需要对业务流程有太多的了解
2.缺点:
每个不同的实现都需要定义一个子类,这会导致类的个数的增加。