标签:
一:简单工厂模式的优点
--->在阎宏博士的《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 }
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 }
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 }
登陆方式工厂
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 }
模拟场景测试
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 }
标签:
原文地址:http://www.cnblogs.com/shangxiaofei/p/4611453.html