java设计模式--模板方法模式(二)
class WorkerLogin
{
/**
* 功能:
* 判断登录数据是否正确,也就是是否能登录成功
* @param lm 封装登录数据的Model
* @return true表示登录成功,false表示登录失败
*/
public boolean login(WorkerLoginModel lm)
{
//根据工作人员编号去获取工作人员的数据
WorkerModel wm = findWorkerByWorkerId(lm.getWorkerId());
//判断从前台传递过来的用户名和加密后的密码数据
//和数据库中已有的数据是否匹配
//先判断工作人员是否存在,如果wm为null,说明工作人员肯定不存在
//但是不为Null,工作人员也不一定存在
//因为数据层可能返回new WorkerModel();因此还需要进一步判断
if(wm != null)
{
//把前台传来的密码数据使用相应的加密算法进行加密运算
String encryptPwd = this.encryptPwd(lm.getPwd());
//如果工作人员存在,检查工作人员的编号和密码是否匹配
if(wm.getWorkerId().equals(lm.getWorkerId()) && wm.getPwd().equals(encryptPwd))
{
return true;
}
}
return false;
}
/**
* 功能:
* 对密码数据进行加密
* @param pwd
* @return
*/
private String encryptPwd(String pwd)
{
//这里对密码数据进行加密
return pwd;
}
/**
* 功能:
* 根据工作人员编号获取工作人员的详细信息
* @param workerId
* @return
*/
private WorkerModel findWorkerByWorkerId(String workerId)
{
WorkerModel wm = new WorkerModel();
wm.setWorkerId(workerId);
wm.setName("Worker1");
wm.setPwd("Worker1");
wm.setUuid("Worker0001");
return wm;
}
}
复制代码
复制代码
/**
* 功能:
* 描述登录人员登录时填写的信息的数据模型
* @author Administrator
*
*/
public class WorkerLoginModel
{
private String workerId;
private String pwd;
public String getWorkerId()
{
return workerId;
}
public void setWorkerId(String workerId)
{
this.workerId = workerId;
}
public String getPwd()
{
return pwd;
}
public void setPwd(String pwd)
{
this.pwd = pwd;
}
}
复制代码
复制代码
/**
* 功能:
* 描述工作人员信息的数据模型
* @author Administrator
*
*/
public class WorkerModel
{
private String uuid;
private String workerId;
private String pwd;
private String name;
public String getUuid()
{
return uuid;
}
public void setUuid(String uuid)
{
this.uuid = uuid;
}
public String getWorkerId()
{
return workerId;
}
public void setWorkerId(String workerId)
{
this.workerId = workerId;
}
public String getPwd()
{
return pwd;
}
public void setPwd(String pwd)
{
this.pwd = pwd;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
复制代码
上面的实现,有两个很明显的问题:一是重复或相似代码太多;二是扩展起来很不方便。
---------------------------------------------------------------------------------------
下面使用模板方法模式来解决上诉的问题
首先介绍一些关于模板方法模式的概念:
模板方法模式的定义:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
下面分析一下,登录控制大致的逻辑判断步骤如下:
(1)根据登录人员的编号去获取相应的数据。
(2)获取对登录人员填写的密码数据进行加密后的数据,如果不需要加密,那就直接返回登录人员填写的密码数据。
(3)判断登录人员填写的数据和从数据库中获取的数据是否匹配。