Enum을 통해 다양한 로그인 방법 해결

4343 단어 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("[email protected]");
        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 메서드를 추가합니다.
 
 
 

좋은 웹페이지 즐겨찾기