设计23式—模板方法

来源:互联网 发布:windows模拟器中文版 编辑:程序博客网 时间:2024/04/30 08:53

最近在看设计模式之禅,书的内容以讲故事的方式介绍了设计模式,强力推荐。

以下是个人对于模板方法模式的理解

/* * 模板方法模式 * 优点 * 封装不变部分,扩展可变部分 * 提取公共部分代码,便于维护 * 行为由父类控制,子类实现 *  */public class MyMain {public static void main(String[] args) {new carA().test();new carB().test();}}//核心//定义一个抽象的车模型类(抽象模板)abstract class carModel{//车的基本抽象方法:启动protected abstract void start();//车的基本抽象方法:暂停protected abstract void stop();//车的基本抽象方法:奔跑protected abstract void run();//车的模板方法:测试 ,用于测试车模型的基本方法(既子类提取的公共方法:测试)protected void test() {System.out.println("开始测试车模型:");this.start();if (isRun()) {this.run();}this.stop();System.out.println("测试结算。");};//钩子方法 默认测试时车是要奔跑起来的(子类重写该方法,可用于控制测试时是否要奔跑)protected boolean isRun() {return true;}}//继承车模型的A类车模型(具体模板)class carA extends carModel{//实现车模型的基本方法@Overrideprotected void start() {System.out.println("A类车启动");}@Overrideprotected void stop() {System.out.println("A类车暂停");}@Overrideprotected void run() {System.out.println("A类车奔跑");}//重写钩子方法,使A类车测试时不用奔跑起来@Overrideprotected boolean isRun() {return false;}}//继承车模型的B类车模型(具体模板)class carB extends carModel{@Overrideprotected void start() {System.out.println("B类车启动");}@Overrideprotected void stop() {System.out.println("B类车暂停");}@Overrideprotected void run() {System.out.println("B类车奔跑");}}



原创粉丝点击