更新時間:2022-04-02 10:28:09 來源:動力節點 瀏覽1648次
我們首先描述了簡單工廠模式:簡單工廠模式是一種類創建模式,也稱為靜態工廠方法模式。簡單工廠模式是一個工廠對象,它決定創建哪個產品類實例。
在登錄功能方面,如果應用系統需要支持多種登錄方式,如密碼認證和域認證(密碼認證通常是對數據庫中的用戶進行驗證,而域認證是對微軟域中的用戶進行驗證)。這樣做的自然方法是創建一個適用于各種登錄模式的界面,如下圖所示:
public interface Login {
//validate logon
public boolean verify(String name , String password);
}
public class DomainLogin implements Login {
@Override
public boolean verify(String name, String password) {
// TODO Auto-generated method stub
/**
* Business logic
*/
return true;
}
}
public class PasswordLogin implements Login {
@Override
public boolean verify(String name, String password) {
// TODO Auto-generated method stub
/**
* Business logic
*/
return true;
}
}
我們還需要一個工廠類LoginManager來創建不同的登錄對象,并根據調用者的不同需求返回。如果遇到非法請求,則返回運行時異常。
public class LoginManager {
public static Login factory(String type){
if(type.equals("password")){
return new PasswordLogin();
}else if(type.equals("passcode")){
return new DomainLogin();
}else{
/**
* It would be more appropriate to throw a custom exception here
*/
throw new RuntimeException("No login type found");
}
}
}
測試類:
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String loginType = "password";
String name = "name";
String password = "password";
Login login = LoginManager.factory(loginType);
boolean bool = login.verify(name, password);
if (bool) {
/**
* Business logic
*/
} else {
/**
* Business logic
*/
}
}
}
如果不使用簡單工廠模式,驗證登錄Servlet代碼如下(假設Test是一個Servlet,變量loginType、name、password代表客戶端傳過來的參數):
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String loginType = "password";
String name = "name";
String password = "password";
//Handling password authentication
if(loginType.equals("password")){
PasswordLogin passwordLogin = new PasswordLogin();
boolean bool = passwordLogin.verify(name, password);
if (bool) {
/**
* Business logic
*/
} else {
/**
* Business logic
*/
}
}
//Processing Domain Authentication
else if(loginType.equals("passcode")){
DomainLogin domainLogin = new DomainLogin();
boolean bool = domainLogin.verify(name, password);
if (bool) {
/**
* Business logic
*/
} else {
/**
* Business logic
*/
}
}else{
/**
* Business logic
*/
}
}
}
JAVA and Models 使用 java.text.DataFormat 類作為簡單工廠模式的典型示例。
模型的核心是工廠類。該類包含必要的邏輯判斷來決定何時創建登錄驗證類的實例,而調用者則免除了直接創建對象的責任。簡單工廠模式通過這種方式實現了職責分工,當系統引入新的登錄模式時,不需要修改調用者。
這個工廠類集中了所有的創建邏輯。當有復雜的層次結構時,所有的業務邏輯都在這個工廠類中實現。當它不能工作時,整個系統都會受到影響。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習