模板模式:
模板模式属于行为型模式中的一员, 此模式中, 类对外公开定义一个函数表示自己的行为(要做什么).
例: 我们常用的操作系统有Windows/ macOS/ Linux等, 当我们首次使用时都会进行开机/ 输入密码的操作, 此时我们可以将开机/ 输入密码函数进行封装并对外提供一个系统初始化的操作. 整体运用的模式我们称之为模板模式.
为什么要使用此模式呢?
- 封装不变部分,扩展可变部分
- 提取公用代码, 便于维护
- 行为由父类进行控制, 子类实现
说了这么多, 下面我们看一个简单例子.
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();
}
}
下面是运行结果图
总结:
主要解决:一些方法通用, 却在每一个子类都重新编写.
何时使用:class具有相同的功能
关键代码:顶层类对外提供一个final函数对模板进行封装.
优点:父类封装不变部分, 子类扩展可变部分; 行为交给父类进行定义, 子类具体实现
;
缺点:每一个不同的实现都需要一个子类来实现, 导致类的个数增加, 使得系统更加庞大.
更多设计模式请看这里:
http://www.jianshu.com/u/eb77504b1d68
喜欢有帮助的话: 双击、评论、转发,动一动你的小手让更多的人知道!关注 帅比-杨