zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    AJPFX总结mysql复制表结构,表数据
    AJPFX总结IO流中的缓冲思想
    AJPFX学习Java函数知识总结
    AJPFX总结面向对象特征之一的继承知识
    AJPFX学习笔记JavaAPI之String类
    AJPFX:学习JAVA程序员两个必会的冒泡和选择排序
    AJPFX:关于面向对象及java的一些机制的思考
    ES6 入门系列
    Android studio工具介绍
    获得 LayoutInflater 实例的三种方式
  • 原文地址:https://www.cnblogs.com/zhuojun/p/5836265.html
Copyright © 2011-2022 走看看