1.模板模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。(通俗点说就是将方法声明到基类中,而在基类中可以通过公有方法访问对应的不同功能的方法,同时也可以访问具有已知功能的方法,实现复用。)
2.类型:类行为型模式
3.倒置原则:通俗讲 由基类决定调用哪个派生类实现,而不是由派生类决定。
4.优点
代码复用。使用继承来实现代码复用。
遵守“开闭原则”。可以在不修改原有代码的前提下灵活的新增具体子类。
实现反向控制。通过由子类决定是否覆盖父类的空方法来决定某一特定步骤是否需要执行。
5.缺点
如果基本方法中,可变的基本方法过多,会导致产生大量的子类。
package 模板模式;
/*
AbstractClass:抽象类
抽象类
定义基本操作和模板方法。
基本操作(PrimitiveOperations):每一个基本操作对应实现算法的一个步骤,在其子类中可以重定义或实现这些步骤。
模板方法(Template Method):用于定义算法的框架。可以调用抽象类中基本方法,在抽象类的子类中实现的基本方法,还可以调用其他对象中的方法。
ConcreteClass:具体子类
具体类
抽象类的子类。
实现在父类中声明的抽象基本操作,或者重写在父类中已经实现的具体基本操作。
*/
public class TemplatePattern {
public static void main(String[] args) {
AbstractClass c = new ConcreteClassA();
c.templateMethod();
System.out.println("-------------");
c = new ConcreteClassB();
c.templateMethod();
}
}
//模板方法为具体的方法,因此不能用接口,只能用抽象类来实现
abstract class AbstractClass{
//将基本方法组合在一起
public void templateMethod(){
primitiveOperation1();
primitiveOperation2();
primitiveOperation3();
}
//抽象类中的基本方法
public void primitiveOperation1(){
System.out.println("AbstractClass primitiveOperation1()");
}
//让子类实现的方法
public abstract void primitiveOperation2();
//空方法,子类中通过选择是否通过覆盖此方法来控制某些操作是否执行
public void primitiveOperation3(){
}
}
class ConcreteClassA extends AbstractClass{
@Override
public void primitiveOperation2() {
System.out.println(" ConcreteClassA primitiveOperation2()");
}
@Override
public void primitiveOperation3() {
System.out.println(" ConcreteClassA primitiveOperation3()");
}
}
class ConcreteClassB extends AbstractClass{
@Override
public void primitiveOperation2() {
System.out.println(" ConcreteClassB primitiveOperation2()");
}
@Override
public void primitiveOperation3() {
System.out.println(" ConcreteClassB primitiveOperation3()");
}
}