抽象类应用模板方法模式和接口应用之策略设计模式
应用模板方法(抽象类)
模板方法模式(Templete Method):定义一个操作中的算法的骨架,而将一些可变部分的实现延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。
例如:抽象类只去做一个权限检查的事情,至于其他事情,则交给子类去做
代码实现:
public class Test7 {
public static void main(String[] args){
UserManager userManager = new UserManager();
userManager.check("admin","add");
}
}
abstract class BaseManager{
public void check(String user,String method){
if("admin".equals(user)){
execute(method);
}else{
System.out.println("你没有操作权限,请联系管理员");
}
}
public abstract void execute(String method);
}
class UserManager extends BaseManager{
@Override
public void execute(String method){
if("add".equals(method)){
System.out.println("你执行了添加操作");
}else if("del".equals(method)){
System.out.println("你执行了删除操作");
}
}
}
运行结果:
你执行了添加操作
策略设计(接口应用)
策略模式(Strategy Pattern):定义了一些列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于它的客户应用可独立发生变化
定义一个接口:
public interface Isave{
void save();
}
两个实现类:
public class NetIsave implements Isave{
@Override
public void save() {
System.out.println("保存在网络上");
}
}
public class HomeIsave implements Isave{
@Override
public void save() {
System.out.println("保存在家里");
}
}
定义一个抽象类进行封装:
public abstract class BaseIsave{
private Isave isave;
public void setIsave(Isave isave) {
this.isave= isave;
}
public Isave getIsave() {
return this.getIsave();
}
public void add() {
System.out.println("检查数据安全性");
isave.save();
}
}
我们需要使用,只需要去继承这个抽象类即可:
public class User extends BaseIsave{
}
测试:
public class Test4 {
public static void main(String[] args) {
// 创建对象
BaseIsave isave = new User();
// 传入参数(接口的实例化对象)
isave.setIsave(new HomeIsave());
// 执行操作
isave.add();
}
}