1、需要解决的问题: a、避免出现坏味道,比如过多的if,else;b、增加新的登陆方式可以减少修改成本
2、为了解决以上问题,将引入以下几个关键点:a、引入Login视图对象。b、使用枚举型。
3、具体实现如下。
/**登陆值对象
* Date: 2010-11-24
* Time: 21:30:26
*/
public class Login {
private LoginModel model;
private LoginService service;
private String password;
private String email;
private String cellphone;
private String username;
private String qq;
public boolean doLogin(){
return model.doLogin(this,service);
}
public void setModel(LoginModel model) {
this.model = model;
}
public void setEmail(String email) {
this.email = email;
}
public void setCellphone(String cellphone) {
this.cellphone = cellphone;
}
public void setUsername(String username) {
this.username = username;
}
public void setQq(String qq) {
this.qq = qq;
}
public LoginModel getModel() {
return model;
}
public LoginService getService() {
return service;
}
public String getEmail() {
return email;
}
public String getCellphone() {
return cellphone;
}
public String getUsername() {
return username;
}
public String getQq() {
return qq;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
/**
* Date: 2010-11-24
* Time: 21:28:11
*/
/**
* 登陆方式
*/
public enum LoginModel {
Email{
public boolean doLogin(Login login ,LoginService service){
return service.checkByEamil(login.getEmail(),login.getPassword());
}
},
Username{
public boolean doLogin(Login login ,LoginService service){
return service.checkByUsername(login.getUsername(),login.getPassword());
}
},
Cellphone{
public boolean doLogin(Login login ,LoginService service){
return service.checkByCellphone(login.getCellphone(),login.getPassword());
}
},
QQ{
public boolean doLogin(Login login ,LoginService service){
return service.checkByQQ(login.getQq(),login.getPassword());
}
} ;
abstract boolean doLogin(Login login ,LoginService service);
}
package com.ming.login;
/**
* Date: 2010-11-24
* Time: 21:40:09
*/
/**
* Login业务逻辑层
*/
public class LoginService {
public boolean checkByEamil(String email, String password) {
return true;
}
public boolean checkByUsername(String username, String password) {
return true;
}
public boolean checkByCellphone(String cellphone, String password) {
return true;
}
public boolean checkByQQ(String qq, String password) {
return true;
}
}
4、实际应用中如何调用
Login login = new Login();
login.setEmail("xxx@xx.com");
login.setPassword("xxxxxxxxx");
login.setModel(LoginModel.Email);
login.doLogin();
5、增加身份证方式,需改动哪些些东西。
a、login 增加idCard,并增加getter/setter方式
b、LoginModel,增加idCard枚举
IdCard{
public boolean doLogin(Login login ,LoginService service){
return service.checkByIdCard(login.getIdCard(),login.getPassword());
}
}
c、在LoginSevice,增加 checkByIdCard方法。
分享到:
相关推荐
ENUM Softphone应用程序结合了ENUM标准,使得用户可以通过输入电话号码进行多种通信方式,包括直接的IP电话呼叫。软件的安装和使用流程通常涉及: - 下载并安装ENUM Softphone软件。 - 注册或登录,可能需要提供电话...
18. **登录 MySQL**:在 Unix shell 中,使用 `mysql -h hostname -u username` 登录 MySQL 服务器。 19. **myisamchk**:这是一个用于检查、修复、优化和分析 MyISAM 表的工具,能有效提高表的性能和减少磁盘占用...
随着项目的复杂度增加,可能会出现多种不同的状态码,如果没有统一的规划和管理,将可能导致状态码的意义混乱,甚至造成不必要的错误。 #### 3. 解决方案 为了解决上述问题,可以采用枚举类型来定义一组固定的状态...
在构建OJ(Online Judge)系统时,开发者通常面临多种技术路径的选择。根据描述中的内容,我们可以将其大致分为以下几个方面: 1. **利用现有的开源项目进行部署**:例如使用`judge0`这一开源项目,它支持超过60种...
3. **algorithm** - 算法,解决问题或执行特定任务的步骤集合。 4. **Annotation** - 代码注释,用于提供元数据,帮助编译器或运行时系统理解代码。 5. **anonymous** - 匿名的,通常用于匿名内部类,不具有名称的...
清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚...登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览...
清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚...登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览...
清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚...登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览...
清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚...登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览...
清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚...登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览...
清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚...登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览...
crawly利用Elixir的并发特性,结合了Erlang虚拟机(BEAM)的稳定性,为大规模爬虫项目提供了可靠的解决方案。 ### 主要特点 1. **并发性**:Elixir的actor模型允许crawly并行处理多个URL,极大地提高了爬取效率。 ...
数据结构是组织和存储数据的方式,而算法是解决问题的步骤或方法。在软件开发中,合理选择和设计数据结构可以显著提高程序的性能和可维护性,而高效的算法则可以减少计算资源的消耗,提高系统的响应速度。掌握数据...