Java简单工厂模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

那么简单工厂模式是在什么场景下使用呢,下面就以本人的理解举例说明:

  就拿登录功能来说,假如应用系统需要支持多种登录方式如:口令认证、域认证(口令认证通常是去数据库中验证用户,而域认证则是需要到微软的域中验证用户)。那么自然的做法就是建立一个各种登录方式都适用的接口,如下图所示:

aaarticlea/png;base64,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" alt="" />

public interface Login {
//登录验证
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
/**
* 业务逻辑
*/
return true;
} }
public class PasswordLogin implements Login {

    @Override
public boolean verify(String name, String password) {
// TODO Auto-generated method stub
/**
* 业务逻辑
*/
return true;
} }

我们还需要一个工厂类LoginManager,根据调用者不同的要求,创建出不同的登录对象并返回。而如果碰到不合法的要求,会返回一个Runtime异常。

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 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) {
/**
* 业务逻辑
*/
} else {
/**
* 业务逻辑
*/
}
}
}

简单工厂模式的结构如下图:

aaarticlea/png;base64,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" alt="" />

我们可以设想一下真实的场景,如果把上面的Test当做一个servlet的话,当客户端发起登录请求——>请求交给服务端的Servlet——>Servlet根据客户端传递的loginType调用工厂类LoginManager的factory()方法——>factory()方法根据参数loginType创建相应的登录验证类(DomainLogin或PasswordLogin)并返回——>登录验证类调用方法verify()验证用户名密码是否正确

aaarticlea/png;base64,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" alt="" />

假如不使用简单工厂模式则验证登录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";
//处理口令认证
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{
/**
* 业务逻辑
*/
}
}
}

上面的代码会不会很蛋疼啊。。。呵呵

《JAVA与模式》一书中使用java.text.DataFormat类作为简单工厂模式的典型例子叙述。

简单工厂模式的优点

  模式的核心是工厂类。这个类含有必要的逻辑判断,可以决定在什么时候创建哪一个登录验证类的实例,而调用者则可以免除直接创建对象的责任。简单工厂模式通过这种做法实现了对责任的分割,当系统引入新的登录方式的时候无需修改调用者。

简单工厂模式的缺点

  这个工厂类集中了所以的创建逻辑,当有复杂的多层次等级结构时,所有的业务逻辑都在这个工厂类中实现。什么时候它不能工作了,整个系统都会受到影响。

最新文章

  1. SQL Server 致程序员(容易忽略的错误)
  2. web项目绝对路径与相对路径的问题
  3. Javascript并发模型和事件循环
  4. C#中文件多选 批量下载
  5. OC中的内存管理
  6. 【JDK】电脑上安装多个JDK ,修改JAVA_HOME后没有作用
  7. win8.1 vs2010 C++环境下 编译Android Adb.exe
  8. oracle中between
  9. Leetcode: Length of Last Word in python
  10. Javascript之拖拽库
  11. 字符串转与ASCII码之间的互换
  12. Nginx配置域名跳转实例
  13. HDU 1051 Wooden Sticks (贪心)
  14. 如果非的让我引起大家的狂拍,那我说一句PHP是世界上最好的语言?
  15. xampp——apache服务启动问题(端口占用)
  16. 四十一、Linux 线程——线程同步之条件变量
  17. C# to IL 10 Exception Handling(异常处理)
  18. 腾讯云服务器无法ssh登陆问题
  19. 最短路径问题-Dijkstra
  20. stringbuffer 和 stringbuilder区别

热门文章

  1. UIButtonType各个类型的解释:
  2. 大专生自学iOS到找到工作的前前后后
  3. Grub4dos boot
  4. linux 第十天学习
  5. Spring Cloud 微服务入门(一)--初识分布式及其发展历程
  6. 08JavaScript对象
  7. foreach传值
  8. 高性能MySQL--innodb中事务的隔离级别与锁的关系
  9. PAT (Basic Level) Practice 1008 数组元素循环右移问题
  10. HDU 5212 莫比乌斯反演