定义
定义一个算法中的操作框架,而将一些步骤延迟到子类中。使得子类可以不改变算法结构即可重定义该算法的某些特定步骤。
角色该设计模式的角色划分较为简单
抽象模版类
具体模版类
抽象模版类又包含了这样几个方法:模版方法,具体方法,抽象方法,勾子方法。
模版方法
决定了算法的实现步骤,该方法中调用了具体方法,待实现的抽象方法,勾子方法等。是算法执行的一个模版。
具体方法
具体方法是算法中较稳稳定的部分,所以抽象类中给出了方法的具体实现。
抽象方法
抽象方法正是定义中所说的延迟到子类实现的方法。
勾子方法
一般模版方法会给出默认实现,子类中看情况对这个方法进行覆盖重写。
uml
实现过程/** * created by tiantian on 2018/7/28 */public abstract class abstracttemplatemethod { public void templatemethod() { implementedmethod(); abstractmethod(); hookmethod(); // ... more than method invoke } public void anothertemplatemethod() { // do other things } public abstract void abstractmethod(); public void hookmethod() {} public void implementedmethod() { system.out.println("i have been implemented in templatemethod class."); } // ... more than method abstract or implemented.}
/** * created by tiantian on 2018/7/28 */public class concretetempletemethod extends abstracttemplatemethod { @override public void abstractmethod() { system.out.println("do something"); } @override public void hookmethod() { system.out.println("do something in hookmethod"); }}
定义定义一个算法中的操作框架,而将一些步骤延迟到子类中。使得子类可以不改变算法结构即可重定义该算法的某些特定步骤。
角色该设计模式的角色划分较为简单
抽象模版类
具体模版类
抽象模版类又包含了这样几个方法:模版方法,具体方法,抽象方法,勾子方法。
模版方法
决定了算法的实现步骤,该方法中调用了具体方法,待实现的抽象方法,勾子方法等。是算法执行的一个模版。
具体方法
具体方法是算法中较稳稳定的部分,所以抽象类中给出了方法的具体实现。
抽象方法
抽象方法正是定义中所说的延迟到子类实现的方法。
勾子方法
一般模版方法会给出默认实现,子类中看情况对这个方法进行覆盖重写。
uml
实现过程/** * created by tiantian on 2018/7/28 */public abstract class abstracttemplatemethod { public void templatemethod() { implementedmethod(); abstractmethod(); hookmethod(); // ... more than method invoke } public void anothertemplatemethod() { // do other things } public abstract void abstractmethod(); public void hookmethod() {} public void implementedmethod() { system.out.println("i have been implemented in templatemethod class."); } // ... more than method abstract or implemented.}
/** * created by tiantian on 2018/7/28 */public class concretetempletemethod extends abstracttemplatemethod { @override public void abstractmethod() { system.out.println("do something"); } @override public void hookmethod() { system.out.println("do something in hookmethod"); }}
相关文章:
java设计模式-设计模式的六种原则
java设计模式之工厂模式(简单工厂模式+工厂方法模式)
相关视频:
设计模式
以上就是案例详解java23种设计模式:模版方法模式(附代码)的详细内容。