工厂方法模式在编程中的实际应用

版权声明:本文为博主原创,未经允许请不要转载哦 https://blog.csdn.net/weixin_43277507/article/details/88322597

最近在用Java写图书管理系统,目前全部代码已经上传到GitHub(https://github.com/TriciaCX)。
在优化代码的过程中,用到了工厂方法模式,简单总结一下。
工厂方法模式是常用的设计模式之一,其定义为:Define an interface for creating an object, but let subclass decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.翻译一下就是:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。(《设计模式之禅》)
结合个人理解,工厂方法的核心思想是“来料加工”。从工厂角度来说,针对不同的“客户需求”,定制不同的“产品”。从客户角度来说,客户提出需求之后,工厂才会加工产品(延迟到子类才开始实例化)。
这是在图书管理系统中定义的业务工厂类。


/**
 * 业务工厂类
 * 工厂模式:来料加工,传给BizFactory类一个字符串,根据字符串返回相应的子类实现
 * @author Tricia
 * @version 4
 */
public class BizFactory
{
	/**
	 * 根据业务类的名称,获得相应业务类的实现
	 * 目前已实现业务类:图书信息业务类、用户业务类(实现权限管理)
	 * @param bizName
	 * @return
	 */
     public static Biz getBiz(String bizName) {
    	 switch(bizName.toLowerCase()) {
    	 case "bookinfobiz":
    		 return new BookInfoBizImplV1();
    	 case "userbiz":
    		 return new UserBizImplV1();
    	// 当需要拓展业务类时,在此处增加即可
         default:
        	 return null;
    	 }
     }
}

这是在图书管理系统中定义的实例化子类(部分代码)

public Role() {
    	setName("默认角色");
    	setKey("default");
    	//bookInfoBiz = new BookInfoBizImplV1();     //"硬"编码实现--可以改成工厂模式来获得子类实现。
    	//工厂模式
    	bookInfoBiz = (BookInfoBiz)BizFactory.getBiz("BookInfoBiz");
    	creatPermissions();
    }
/**
     * 创建给定角色名和权限key的角色
     * 权限key对应一个字符串(参见Role_Permissons.properties),将该字符串分割成数组,逐个赋值给permissions集合
     * @param name
     * @param key
     */
    public Role(String name,String key) {
    	setName(name);
    	setKey(key);
    	bookInfoBiz = (BookInfoBiz)BizFactory.getBiz("BookInfoBiz");
    	creatPermissions();
    }

通过上述的例子,我们可以很直观地感受到工厂方法模式的优点。相比于原始方法,工厂方法模式有很好的扩展性,当日后需要再增加或改进实现的业务类时,也就是工厂方法中的产品类时,只要新增一个产品类或者修改相应的产品类。

猜你喜欢

转载自blog.csdn.net/weixin_43277507/article/details/88322597