设计模式~模板-[Android_YangKe]

作者: Android_YangKe | 来源:发表于2017-10-28 18:02 被阅读154次
    模板模式:

    模板模式属于行为型模式中的一员, 此模式中, 类对外公开定义一个函数表示自己的行为(要做什么).

    例: 我们常用的操作系统有Windows/ macOS/ Linux等, 当我们首次使用时都会进行开机/ 输入密码的操作, 此时我们可以将开机/ 输入密码函数进行封装并对外提供一个系统初始化的操作. 整体运用的模式我们称之为模板模式.

    为什么要使用此模式呢?

    1. 封装不变部分,扩展可变部分
    2. 提取公用代码, 便于维护
    3. 行为由父类进行控制, 子类实现
    yangke.png

    说了这么多, 下面我们看一个简单例子.

    1.AbsSystem

    AbsSystem为模板类, startUp/ inputPassword为模板函数, iniSystem主要封装了模板行为.

    public abstract class AbsSystem {
    abstract void startUp();//开机
    abstract void inputPassword();//输入密码
    
    /**
      * 使用电脑
      */
    public final void iniSystem() {
        startUp();
        inputPassword();
    }
    }
    
    2.Linux

    Linux继承了模板类(AbsSystem)是对抽象行为的具体实现, 我们可以在startUp/ inputPassword函数中进行业务处理这里只做简单打印.

    public class Linux extends AbsSystem{
    
    @Override
    void startUp() {
        // TODO Auto-generated method stub
        System.out.println("Linux startUp");
        
    }
    
    @Override
    void inputPassword() {
        // TODO Auto-generated method stub
        System.out.println("Linux inputPassword");
    }
    }
    
    3.Windows

    Windows如上, 同是模板类的具体实现, 开机操作在startUp函数中进行, 输入密码在inputPassword中进行.

    public class Windows extends AbsSystem{
    
    @Override
    void startUp() {
        // TODO Auto-generated method stub
        System.out.println("Windows startUp");
        
    }
    
    @Override
    void inputPassword() {
        // TODO Auto-generated method stub
        System.out.println("Windows inputPassword");
        
    }
    }
    
    4.Test

    Test为一个测试类, 通过以下代码我们可以看出当Linux或者Windows在未开机的状态下只需调用iniSystem函数足矣, 在使用上比较方便.

    public class Test {
    public static void main(String[] args) {
        Linux linux = new Linux();
        linux.iniSystem();
        
        Windows windows = new Windows();
        windows.iniSystem();
    }
    }
    

    下面是运行结果图

    yangke.png

    总结:

    主要解决:一些方法通用, 却在每一个子类都重新编写.
    何时使用:class具有相同的功能
    关键代码:顶层类对外提供一个final函数对模板进行封装.
    优点:父类封装不变部分, 子类扩展可变部分; 行为交给父类进行定义, 子类具体实现
    ;
    缺点:每一个不同的实现都需要一个子类来实现, 导致类的个数增加, 使得系统更加庞大.

    更多设计模式请看这里:
    http://www.jianshu.com/u/eb77504b1d68

    喜欢有帮助的话: 双击、评论、转发,动一动你的小手让更多的人知道!关注 帅比-杨

    相关文章

      网友评论

      本文标题:设计模式~模板-[Android_YangKe]

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