设计模式~模板-[Android_YangKe]

模板模式:

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

例: 我们常用的操作系统有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函数对模板进行封装.
优点:父类封装不变部分, 子类扩展可变部分; 行为交给父类进行定义, 子类具体实现
;
缺点:每一个不同的实现都需要一个子类来实现, 导致类的个数增加, 使得系统更加庞大.

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,310评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,826评论 18 399
  • 本文首发于个人博客:Lam's Blog - 谈谈23种设计模式在Android源码及项目中的应用,文章由Mark...
    格子林ll阅读 4,711评论 1 105
  • 1.调用函数2.创建函数3.按值传递参数4.按引用传递参数5.默认参数6.使用类型提示7.从函数返回值8.递归函数...
    天黑北风吹阅读 126评论 0 0
  • 范爷说的这经典的三句话 说到范爷已无人不知,有人爱,有人厌,还有人观望 圈主觉得明星真的不容易,表面光鲜无比, 背...
    求谷阅读 594评论 0 0