美文网首页
Java设计模式之模板(template)方法模式

Java设计模式之模板(template)方法模式

作者: 小小的Jobs | 来源:发表于2018-10-26 17:58 被阅读1次

    转载    1.对模板方法模式的一些个人理解

    模板方法模式是结构最简单的行为型模式,有时,我们完成一件事情时次序是固定的,只有有些步骤确实变化的。比如,当我们去银行办业务时,就是a排队取号 b办具体业务(取钱) c对工作人员评价 三个步骤,而第二个步骤是不固定的。这种情况下,使用模板方法设计模式就优势明显了。我们只要在抽象方法中定义好完成这么一件事情的骨架,将具体步骤自己实现,而将不固定的部分暴露给子类实现即可,也就是将一些步骤延迟到子类中实现。子类不能改变父类的算法结构,只能是重新定义父类的某些步骤。贴代码吧,直观一点:

        package com.bighuan.template;

        /**

        * 设计模式之模板方法模式Demo

        *

        * @author bighuan 去银行办理业务的步骤 1,排队取号 2,办理业务 3,为工作人员评分

        */

        public abstract class BankTemplate {

        /**

        * 排队取号

        */

        public final void getNum() {

        System.out.println("排队取号");

        }

        /**

        * 办理具体业务定义为抽象方法,供子类实现

        */

        public abstract void exeTask();

        /**

        * 评价

        */

        public final void evaluate() {

        System.out.println("为工作人员评价打分");

        }

        /**

        * 去银行办理业务所有步骤,整套流程

        */

        public final void process() {

        getNum();

        exeTask();

        evaluate();

        }

        }

    在去银行办理业务的抽象模板类中,我们将排队取号和评价等具体方法实现,而将办理业务的核心流程定义为一个抽象的方法exeTask()方法。当子类继承BankTemplate是就必须实现这个方法了,我们就可以在这个方法中做一些取钱啊存款啊等操作。给个例子呗!好的,虽然自己卡里没什么钱,写个取钱的方法还是可以的。如下:

        package com.bighuan.template;

        import org.junit.Test;

        public class WithdrawMoney extends BankTemplate {

        @Override

        public void exeTask() {

        System.out.println("我来银行取钱");

        }

        @Test

        public void test() {

        process();

        }

        }

    WithdrawMoney继承BankTemplate抽象类,就必须实现父类的抽象方法,在这里就可以实现办具体的业务了。你可以取钱,也可以存钱,等等。并且办一个业务中的流程是不变的,我们在父类的process()中定义好了。不知道你注意到了没有,父类中那些具体的步骤都用final关键字修饰了,不允许子类重写,子类只能自己实现那个暴露的方法,当然了,子类也是可以扩展一些方法的。由此可见,模板方法模式体现了Java中的”开闭原则”。

    运行那个test()方法,结果如下:

        排队取号

        我来银行取钱

        为工作人员评价打分

    2.优缺点

    优点:1,在父类中将总的具体步骤定义好,由子类实现细节。子类不会更改父类的算法结构。2,实现代码复用。3,很好的体现了开闭原则。

    缺点:不同的实现都需要定义一个子类,如果实现过多,系统会过于庞大的,设计会过于复杂。但也体现了“单一职责原则”

    转载 原文:https://blog.csdn.net/bighuan/article/details/62940515

    相关文章

      网友评论

          本文标题:Java设计模式之模板(template)方法模式

          本文链接:https://www.haomeiwen.com/subject/jaeltqtx.html