`
sing100star
  • 浏览: 28578 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

利用Enum解决多种登陆方式

QQ 
阅读更多

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 安装使用及SDK说明

    ENUM Softphone应用程序结合了ENUM标准,使得用户可以通过输入电话号码进行多种通信方式,包括直接的IP电话呼叫。软件的安装和使用流程通常涉及: - 下载并安装ENUM Softphone软件。 - 注册或登录,可能需要提供电话...

    sql全方面优化内容解析(各种面试题和解决方法)

    18. **登录 MySQL**:在 Unix shell 中,使用 `mysql -h hostname -u username` 登录 MySQL 服务器。 19. **myisamchk**:这是一个用于检查、修复、优化和分析 MyISAM 表的工具,能有效提高表的性能和减少磁盘占用...

    tedu二阶段ResultVO

    随着项目的复杂度增加,可能会出现多种不同的状态码,如果没有统一的规划和管理,将可能导致状态码的意义混乱,甚至造成不必要的错误。 #### 3. 解决方案 为了解决上述问题,可以采用枚举类型来定义一组固定的状态...

    OJ网站制作详细流程PDF

    在构建OJ(Online Judge)系统时,开发者通常面临多种技术路径的选择。根据描述中的内容,我们可以将其大致分为以下几个方面: 1. **利用现有的开源项目进行部署**:例如使用`judge0`这一开源项目,它支持超过60种...

    java常用英语单词(2).

    3. **algorithm** - 算法,解决问题或执行特定任务的步骤集合。 4. **Annotation** - 代码注释,用于提供元数据,帮助编译器或运行时系统理解代码。 5. **anonymous** - 匿名的,通常用于匿名内部类,不具有名称的...

    vc++ 开发实例源码包

    清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚...登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览...

    vc++ 应用源码包_1

    清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚...登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览...

    vc++ 应用源码包_2

    清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚...登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览...

    vc++ 应用源码包_6

    清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚...登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览...

    vc++ 应用源码包_5

    清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚...登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览...

    vc++ 应用源码包_3

    清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚...登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览...

    crawly:Crawly,一个用于Elixir的高级Web爬行和抓取框架

    crawly利用Elixir的并发特性,结合了Erlang虚拟机(BEAM)的稳定性,为大规模爬虫项目提供了可靠的解决方案。 ### 主要特点 1. **并发性**:Elixir的actor模型允许crawly并行处理多个URL,极大地提高了爬取效率。 ...

    计算机类面试试题大奉献

    数据结构是组织和存储数据的方式,而算法是解决问题的步骤或方法。在软件开发中,合理选择和设计数据结构可以显著提高程序的性能和可维护性,而高效的算法则可以减少计算资源的消耗,提高系统的响应速度。掌握数据...

Global site tag (gtag.js) - Google Analytics