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