Template模式

其实所有设计模式都是有EIT结构组成,EIT就好比原子,具体的模式好比分子,分子由原子组成。

比如现在要画两幅画,这两幅画的背景都是蓝天白云,其中一幅画的前景是海鸥,
另外一幅画的前景是风筝。那么应该把不变的部分提取到父类,也就是把背景提取到父类,变化的部分放到子类。

public class E
{
    public void  draw()
    {
        //蓝天白云
    }
}

public class T extends E
{
    public void draw()
    {
        draw();
        //海鸥
    }
}

//客户端代码
public class Client
{
    public void main()
    {
        E e = new T();
        e.draw();
    }
}

当调用e.draw(); 时会首先调用父类的 draw 再调用子类的 draw。
这是一种实现方式,但这种方式有个缺点就是,子类与父类有较大的依赖,父类的 draw方法被调用后,后面改版,维护的成本就大了。我们可以使用另外一种方式来实现就是
Template Month模式。

Template Method模式:

public class E
{
    public draw()   
    {
        //蓝天白云
        onDraw();
    }
    public void abstract onDraw();
}

public class T extends E
{
    public void onDraw()
    {
        //海鸥
    }   
}    


//客户端代码
public class Client
{
    public void main()
    {
        E e = new T();
        e.draw();
    }
}

这种由客户端代码来调用E的实体函数,再通过接口控制反转来执行T的 onDraw()
这种模式叫 TM模式。其中E的draw() 方法是叫 template方法,onDraw()叫 hook方法

TM设计模式虽然已经很优秀了,但仍然有个不好的地方,就是 Client 这里会用到 E 这个父类,那么当有很多Client (客户端用户不止一个厂商)使用了E,是的E变化的自由度就变低了,解决办法如下。

Template Month模式:

interface I
{
    public void  draw();
}


public class E implements  I
{
    public void draw()   
    {
        //蓝天白云
        onDraw();
    }
    public void abstract onDraw();
}

public class T extends E
{
    public void onDraw()
    {
        //海鸥
    }   
}    


//客户端代码
public class Client
{
    public void main()
    {
        I e = new T();
        e.draw();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 子类重载继承template类实现,不继承template类接口,将虚函数放入protected里面 与strat...
    老练子丶2017阅读 1,774评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,735评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,107评论 25 709
  • 第二天 现在正是它果实生长的季节,先长种子再长果肉。
    989ee5f2e56a阅读 2,985评论 0 0
  • 作者 | 孙伟 在我看来,学习孙拳,70岁以上的老人去世后,听人传授就一定要慎重 好多人大多是主观臆想 所以一定要...
    书岳阅读 3,496评论 0 2

友情链接更多精彩内容