美文网首页
模板模式

模板模式

作者: Neo_xu | 来源:发表于2018-09-28 00:04 被阅读0次

    概念

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

    角色

    • 抽象出方法的父类
    • 具体实现的子类

    利弊

    • 代码复用
    • 反向的控制结构
    • 具体实现细节不改变父类结构

    • 每个不同的实现都需要不同的子类,会导致系统变得庞大

    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");
    }
    ···

    相关文章

      网友评论

          本文标题:模板模式

          本文链接:https://www.haomeiwen.com/subject/rxzyoftx.html