java设计模式--模板方法模式(一)

2014-11-24 03:05:43 · 作者: · 浏览: 2
模板方法模式
模拟场景:
  登录控制:
    现在有一个基于Web的企业级应用系统,需要实现两种登录控制(管理员登录和客户登录),直接使用不同的登录页面来区分它们。
  下面是基本的功能需求描述:
  普通客户登录前台的登录控制功能:
  (1)前台界面:用户能输入用户名和密码;提交登录请求,让系统进行登录控制。
  (2)后台:从 数据库获取登录人员的信息。
  (3)后台:判断从前台传递过来的登录数据和数据库中已有的数据是否匹配。
  (4)前台Action:如果匹配就转向首页,如果不匹配就返回到登录页面,并显示错误提示信息。
  管理员登录后台的登录控制功能:
  (1)前台界面:用户能输入用户名和密码;提交登录请求,让系统进行登录控制。
  (2)后台:从数据库获取登录人员的信息。
  (3)后台:把从前台传递过来的密码数据使用相应的 加密算法进行加密运算,得到加密后的密码数据。
  (4)后台:判断从前台传递过来的用户名和加密后的密码数据和数据库中已有的数据是否匹配。
  (5)前台Action:如果匹配就转向首页,如果不匹配就返回到登录界面,并显示错误提示信息。
-----------------------------------------------------------------------------------------------
首先不用模式的解决方案:
  将普通用户登录和工作人员登录完全作为两个独立的小模块来完成:
  下面是普通客户登录代码演示:
  
复制代码
public class NormalLogin
{
/**
* 功能:
* 判断登录数据是否正确,也就是是否能登录成功
* @param lm 封装登录数据的Model
* @return true表示登录成功,false表示登录失败
*/
public boolean login(UserLoginModel lm)
{
//从数据库获取登录人员的信息,就是根据用户编号去获取人员的数据
UserModel um = this.findUserById(lm.getUserId());
//判断从前台传递过来的登录数据和数据库中已有的数据是否匹配
//先判断用户是否存在,如果um为null,说明用户肯定不存在
//但是不为null,用户不一定存在,因为数据层可能返回new UserModel();
//因此还需要做进一步的判断
if(um != null)
{
//如果用户存在,检查用户编号和密码是否匹配
if(um.getUserId().equals(lm.getUserId()) && um.getPwd().equals(lm.getPwd()))
{
return true;
}
}
return false;
}
/**
* @param userId 用户编号
* @return 对应的用户的详细信息
*/
private UserModel findUserById(String userId)
{
//这里省略具体的处理,仅做示意,返回一个有默认数据的对象
UserModel um = new UserModel();
um.setUserId(userId);
um.setName("test");
um.setPwd("test");
um.setUuid("User001");
return um;
}
}
复制代码
复制代码
/**
* 功能:
* 描述用户信息的数据模型
* @author Administrator
*
*/
public class UserModel
{
private String uuid;
private String userId;
private String pwd;
private String name;
public String getUuid()
{
return uuid;
}
public void setUuid(String uuid)
{
this.uuid = uuid;
}
public String getUserId()
{
return userId;
}
public void setUserId(String userId)
{
this.userId = userId;
}
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;
}
}
复制代码
复制代码
/**
* 功能:
* 描述登录人员登录时填写的信息的数据模型
* @author Administrator
*
*/
public class UserLoginModel
{
private String userId;
private String pwd;
public String getUserId()
{
return userId;
}
public void setUserId(String userId)
{
this.userId = userId;
}
public String getPwd()
{
return pwd;
}
public void setPwd(String pwd)
{
this.pwd = pwd;
}
}
复制代码
下面是管理员登录代码演示:
复制代码
public