更新时间:2022-04-02 10:28:09 来源:极悦 浏览1267次
我们首先描述了简单工厂模式:简单工厂模式是一种类创建模式,也称为静态工厂方法模式。简单工厂模式是一个工厂对象,它决定创建哪个产品类实例。
在登录功能方面,如果应用系统需要支持多种登录方式,如密码认证和域认证(密码认证通常是对数据库中的用户进行验证,而域认证是对微软域中的用户进行验证)。这样做的自然方法是创建一个适用于各种登录模式的界面,如下图所示:
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天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习