zoukankan      html  css  js  c++  java
  • 摸板模式与钩子

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

    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

  • 相关阅读:
    Java线程状态和关闭线程的正确姿势
    Eclipse最全的编码设置
    Maven中的src/test/java颜色不正常
    web.xml 各版本的 Schema 头部声明
    程序员面试系列
    几款强大的网页生成工具
    endnoteX9批量导入enw
    关于Ubuntu16.04里安装elasticsearch-head显示集群健康值未连接的问题
    U盘做了系统盘,写入如硬盘映像过程中终止,怎么格式化硬盘重新写入?
    使用jupyter notebook出现kernel error
  • 原文地址:https://www.cnblogs.com/ives/p/template_pattern.html
Copyright © 2011-2022 走看看