• 摸板模式与钩子


    常常会在程序中遇到多个子类有共同的方法以及相似的调用过程。这个时候我们就可以使用模板模式来解决这些重复性的工作,例如我们买东西的时候一般都是挑选商品、付款这样的步骤,区别仅仅是挑选的商品品种不一样而已,这个时候我们就可以使用模板模式。那么模板模式需要怎么来实现呢,如下图

    clip_image002

    代码如下:

    public class test

    {

    public static void main(String args[])

    {

    goods f=new fruit();

    f.run();

    goods d=new drink();

    d.run();

    }

    }

    class goods

    {

    void run()

    {

    getgoods();

    pay();

    }

    void getgoods()

    {

    System.out.println("get");

    }

    void pay()

    {

    System.out.println("pay");

    }

    }

    class fruit extends goods

    {

    void getgoods()

    {

    System.out.println("fruit");

    }

    }

    class drink extends goods

    {

    void getgoods()

    {

    System.out.println("drink");

    }

    }

    结果如图:

    clip_image004

    这样我们就可以避免在子类中涉及具体的算法,只需要将重复的内容已经算法提取到父类即可,降低了耦合。

    至此,我们还可以加入一个钩子的机制,即可相应的对一些不需要的算法来进行控制。

    代码如下

    public class test

    {

    public static void main(String args[])

    {

    goods f=new fruit();

    f.run();

    goods d=new drink();

    d.run();

    }

    }

    class goods

    {

    void run()

    {

    if(hasGetGoods())

    getgoods();

    pay();

    }

    void getgoods()

    {

    System.out.println("get");

    }

    boolean hasGetGoods()

    {

    return false;

    }

    void pay()

    {

    System.out.println("pay");

    }

    }

    class fruit extends goods

    {

    boolean hasGetGoods()

    {

    return true;

    }

    void getgoods()

    {

    System.out.println("fruit");

    }

    }

    class drink extends goods

    {

    boolean hasGetGoods()

    {

    return false;

    }

    void getgoods()

    {

    System.out.println("drink");

    }

    }

    结果:

    clip_image006

    联系我:renhanlinbsl@163.com

    2016-8-3

    21:25

  • 相关阅读:
    ubuntu下内核源码树的建立
    删除ubuntu旧版本内核
    设置ubuntu12.04桌面版开机进入命令行模式
    MFC学习笔记(一)向模态对话框传递数据
    redis 映射数据结构粗略
    redis入门
    mybatis总结
    mybatis--mapper配置总结
    mybatis-初步使用
    maven-plugins说明
  • 原文地址:https://www.cnblogs.com/ives/p/template_pattern.html
Copyright © 2020-2023  润新知