您的位置:首页 > 编程语言 > Java开发

Java-回调

2016-01-08 10:18 477 查看
-- from 读书笔记《研磨设计模式》模板模式

例子1:在模板方法中应用

/**
* 登陆模板
*/
public class LoginTemplate {
/**
* 登陆判断
*
* @param model
* 封装登陆数据的model对象
* @return true表示登陆成功,false表示失败
*/
public boolean login(LoginModel model, LoginCallback callback) {
LoginModel loginModel = callback.findLoginUser(model.getLoginId());
if (loginModel != null) {
String encryptPwd = callback.encryptPwd(model.getPwd(), this);
model.setPwd(encryptPwd);
return callback.match(model, loginModel, this);
}
return false;
}

/**
* 密码加密
*
* @param pwd
* 明文密码
* @return 加密后的密码串
*/
public String encryptPwd(String pwd) {
return pwd;
}

/**
* 判断用户填写登陆数据与数据存储是否相符
*
* @param lm
* 登陆数据
* @param dblm
* 存储数据
* @return true表示一致,false表示不相符
*/
public boolean match(LoginModel lm, LoginModel dblm) {
if (lm.getLoginId().equals(dblm.getLoginId())
&& lm.getPwd().equals(dblm.getPwd())) {
return true;
}
return false;
}
}

模板中需要具体实现的地方使用了callback

/**
* 登陆控制的模板方法中需要的回调接口,把所有需要的接口方法都定义出来
*
*/
public interface LoginCallback {

/**
* 根据登陆编号查询存储的用户数据
* @param loginId 登陆编号
* @return 存储中的登陆数据
*/
public LoginModel findLoginUser(String loginId);

/**
* 密码加密
* @param pwd 明文密码
* @return 加密后的密码串
*/
public String encryptPwd(String pwd, LoginTemplate loginTemplate);

/**
* 判断用户填写登陆数据与数据存储是否相符
* @param lm 登陆数据
* @param dblm 存储数据
* @param loginTemplate 通过模板对象调用默认实现
* @return true表示一致,false表示不相符
*/
public boolean match(LoginModel lm, LoginModel dblm, LoginTemplate loginTemplate);
}

回调中可以通过接口实现自己的逻辑方法,也可以通过传递的loginTemplate参数回调其默认实现

//回调
LoginTemplate lt = new LoginTemplate();
boolean flag = lt.login(lm, new LoginCallback() {

@Override
public boolean match(LoginModel lm, LoginModel dblm,
LoginTemplate loginTemplate) {
return loginTemplate.match(lm, dblm);//转调模板实现
}

@Override
public LoginModel findLoginUser(String loginId) {
LoginModel lm = new LoginModel();
lm.setLoginId(loginId);
lm.setPwd("ppwwdd");
return lm;
}

@Override
public String encryptPwd(String pwd, LoginTemplate loginTemplate) {
return loginTemplate.encryptPwd(pwd);//转调模板实现
}
});

这个实现采用匿名类实现callBack接口
假设loginTemplate为A,loginCallBack为B,则整个过程可描述为A的a方法调用B的b方法,B的b方法又去调用A的a1方法完成实现,包含了回调的调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  回调 callback