模板模式

2018-09-28  本文已影响0人  Neo_xu

概念

定义一个操作中算法的骨架,将具体的操作延时到子类,在不改变结构的情况下为可以修改具体的特定步骤,主要的实现原理是继承

角色

利弊

demo

登录的场景
抽象出方法的父类:
登录一般都是要实现校验的步骤和消息推送,还有其实的例如日志记录等,这类用了校验和消息推送作为登录场景的必要步骤,不同的登录方法有不同的校验和不同的消息推送方式。

public abstract class Login {
    
    /** 
    * @Title: login 
    * @Description: 登录
    * @param @return    设定文件 
    * @return Boolean    返回类型 
    * @throws 
    */
    public Boolean login(String userName,String password){
        this.verify(userName, password);
        this.verify(userName, password);
        return true;
    }
    /** 
    * @Title: verify 
    * @Description: 校验
    * @param @param userName
    * @param @param password
    * @param @return    设定文件 
    * @return Boolean    返回类型 
    * @throws 
    */
    public abstract Boolean verify(String userName,String password);
    /** 
    * @Title:sendMessage
    * @Description: 消息通知
    * @param @param userName
    * @param @param password
    * @param @return    设定文件 
    * @return Boolean    返回类型 
    * @throws 
    */
    public abstract Boolean sendMessage(String userName,String password);
}

通多不同的方式有不同的实现,子类将具体实现出来
支付宝的验证登录方式
···
public class AliPayLogin extends Login {
@Override
public Boolean verify(String userName, String password) {
System.out.println("阿里第三方登录校验");
return true;
}

@Override
public Boolean sendMessage(String userName, String password) {
    System.out.println("阿里第三方登录消息通知");
    return true;
}

}
···
微信的登录方式
···
public class WechatLogin extends Login {

@Override
public Boolean verify(String userName, String password) {
    System.out.println("微信系统第三方校验");
    return true;
}

@Override
public Boolean sendMessage(String userName, String password) {
    System.out.println("微信系统第三方消息通知");
    return true;
}

}
···
在是使用的时候完全可以服用login的代码,这样就做到代码的复用,子类又可以拥有不同的实现。
···
public static void main(String[] args) {
Login login = new AliPayLogin();
login.login("test", "1111");
login = new WechatLogin();
login.login("test", "1111");
}
···

上一篇 下一篇

猜你喜欢

热点阅读