public interface Login {
//登陸驗證
public boolean verify(String name , String password);
}
public class PasswordLogin implements Login {
public boolean verify(String name, String password) {
System.out.println("PasswordLogin");
return false;
}
}
public class DomainLogin implements Login {
public boolean verify(String name, String password) {
System.out.println("DomainLogin");
return false;
}
}
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{
/**
* 這裏拋出一個自定義異常會更恰當
*/
throw new RuntimeException("沒有找到登陸類型");
}
}
}
public class LoginTest {
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) {
/**
* 業務邏輯
*/
} else {
/**
* 業務邏輯
*/
}
}
}
運行結果: PasswordLogin
假如不使用簡單工廠模式則驗證登陸Servlet代碼以下
public class LoginTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String loginType = "password";
String name = "name";
String password = "password";
//處理口令認證
if(loginType.equals("password")){
PasswordLogin passwordLogin = new PasswordLogin();
boolean bool = passwordLogin.verify(name, password);
if (bool) {
/**
* 業務邏輯
*/
} else {
/**
* 業務邏輯
*/
}
}
//處理域認證
else if(loginType.equals("passcode")){
DomainLogin domainLogin = new DomainLogin();
boolean bool = domainLogin.verify(name, password);
if (bool) {
/**
* 業務邏輯
*/
} else {
/**
* 業務邏輯
*/
}
}else{
/**
* 業務邏輯
*/
}
}
}
模式的核心是工廠類。這個類含有必要的邏輯判斷,能夠決定在何時建立哪個登陸驗證類的實例,而調用者則能夠免除直接建立對象的責任。簡單工廠模式經過這種作法實現了對責任的分割,當系統引入新的登陸方式的時候無需修改調用者。html
這個工廠類集中了因此的建立邏輯,當有複雜的多層次等級結構時,全部的業務邏輯都在這個工廠類中實現。何時它不能工做了,整個系統都會受到影響。java
博客《JAVA與模式》之簡單工廠模式dom