(1)java设计模式之简单工厂模式

一:简单工厂模式的优点

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

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

二:简单工厂模式的缺点

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



三:简单工厂模式的代码示例


案例:登陆页面有多种登陆方式,一个工厂类,生成不同方式登陆的对象。

登陆接口

 1 package com.yeepay.sxf.interfaces;
 2 
 3 /**
 4  * 登陆接口
 5  * @author sxf
 6  *
 7  */
 8 public interface Login {
 9 
10     /**
11      * 登陆方法
12      * @param username
13      * @param passwd
14      * @return
15      */
16     public boolean goLogin(String username,String passwd);
17 }
View Code

qq登陆

 1 package com.yeepay.sxf.interfaces.impl;
 2 
 3 import com.yeepay.sxf.interfaces.Login;
 4 /**
 5  * qq号登陆
 6  * @author sxf
 7  *
 8  */
 9 public class Qlogin implements Login{
10 
11     @Override
12     public boolean goLogin(String username, String passwd) {
13         //利用qq帐号密码登陆
14         return false;
15     }
16 
17     
18 }
View Code
微博登陆
 1 package com.yeepay.sxf.interfaces.impl;
 2 
 3 import com.yeepay.sxf.interfaces.Login;
 4 /**
 5  * 微博登陆
 6  * @author sxf
 7  *
 8  */
 9 public class WeiboLogin implements Login {
10 
11     @Override
12     public boolean goLogin(String username, String passwd) {
13         //利用微博帐号登陆
14         return false;
15     }
16 
17     
18 }
View Code

登陆方式工厂

 1 package com.yeepay.sxf.interfaces.impl;
 2 
 3 import com.yeepay.sxf.interfaces.Login;
 4 /**
 5  * 登陆方式的工厂类
 6  * @author sxf
 7  *
 8  */
 9 public class LoginFactory {
10     public static Login createLogin(String fn){
11         if("qq".equals(fn)){
12             return new Qlogin();
13         }else if("weibo".equals(fn)){
14             return new WeiboLogin();
15         }else{
16             return null;
17         }
18     }
19 }
View Code

模拟场景测试

 1 package com.yeepay.sxf.test;
 2 
 3 import com.yeepay.sxf.interfaces.Login;
 4 import com.yeepay.sxf.interfaces.impl.LoginFactory;
 5 
 6 public class Test {
 7 
 8     public static void main(String[] args) {
 9         //前台提交用户名和密码,以及登陆方式
10         String username="290325337";
11         String password="shangxiaofei";
12         String fn="qq";
13         
14         //后台通过登陆方式获取合适的登陆bean
15         Login login=LoginFactory.createLogin(fn);
16         
17         //进行登陆
18         boolean flag=login.goLogin(username, password);
19         
20         //判断登陆成功或失败
21         if(flag){
22             //登陆成功
23         }else{
24             //登陆失败
25         }
26         
27         
28     }
29     
30     
31 }
View Code
原文地址:https://www.cnblogs.com/shangxiaofei/p/4611453.html