java 模板方法模式 --- 抽象类的应用
模板方法模式:定义一个操作中的算法骨架,而将一些可变部分的实现延伸到子类中。 模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。
在项目开发中会经常用到这个方法,比如:在一个图书管理系统中,我要进行增删改查的操作,必须先要进行验证是否是管理员,只有验证通过才可以执行相应的操作。我么就可以在抽象类中完成一个认证的算法(方法),只有同过验证,才可以实行操作的抽象方法,在子类中你是增删改查,都由子类去实现符合自己的操作;
在淘宝上买东西也是这样的,你要把商品加入购物车,需要验证你是否登陆,登陆后你想买什么,都随你。
代码实现:
1.先建一个算法骨架,一个只有验证通过之后才可以执行之后的操作
package template;
//抽象类
abstract class BaseManage {
/**
* 验证的算法 ,只有验证通过才能进行 相应的操作
* @param name
* @param method
*/
public void action(String name,String method){
if("admin".equals(name)) { //验证是不是管理员
execute(method); //验证通过之后才可以执行后续操作
}else {
System.out.println("你没有操作权限权限,请联系管理员!!");
}
}
// 抽象的操作方法,子类可以去实现各种操作
public abstract void execute(String method);
}
- 我要新建一个 图书馆管理类,继承上面的抽象类
package template;
/**
* 图书馆管理类
*/
public class LibManage extends BaseManage{
/**
* 验证的方法在父类中
* 只有验证成功了才可以进行之后的操作
*/
/*
* 继承抽象类,必须实现抽象类中所有的抽象方法
*/
public void execute(String method) {
if ("add".equals(method)) {
System.out.println("进行了添加操作");
}else if("del".equals(method)) {
System.out.println("执行了删除操作");
}
}
}
3.我又新建了有个 购物操作类
package template;
/**
* 购物类
*/
public class Shoping extends BaseManage{
public void execute(String method) {
if("order".equals(method)) {
System.out.println("执行了下单操作");
}else if("pay".equals(method)) {
System.out.println("执行了付费操作");
}
}
}
最后还需要一个测试类:
package template;
public class Test {
public static void main(String[] args) {
/**
* 测试类
*/
LibManage lm = new LibManage();
lm.action("user", "del");
lm.action("admin", "add");
Shoping sh = new Shoping();
sh.action("admin", "pay");
}
}
结果如下: