简单工厂模式浅谈

       简单工厂模式(Simple Factory Model是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

   简单工厂UML图

                

  

以Struts2中result的设计为例(java):

 

package simpleFactoryModel;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//以struts2中配置文件result属性为例
// struts.xml---->如<result name="success" type="dispatcher">path</result>
public abstract class Result {
	protected String path;

	// 静态方法,根据type类型生成具体子类reslut对象--->简单工厂方式
	public static Result getInstance(String path, String type) {
         if("dispatcher".equals(type)){
        	  return new DispatcherResult(path);
         }else if("redirect".equals(type)){
        	 return new RedirectResult(path);
         }else{
        	 return null;	 
         }
	}

	public Result(String path) {
		this.path = path;
	}

	public abstract void execute(HttpServletRequest request,
			HttpServletResponse response);
}
  在这里仅以dispatcher和redirect为具体result实例:

 

package simpleFactoryModel;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DispatcherResult extends Result{

	public DispatcherResult(String path) {
		super(path);
	}
	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) {
          //转发
		try {
			request.getRequestDispatcher(path).forward(request, response);
		} catch (Exception e) {
			throw new RuntimeException(e);
		} 
		
	}

}

package simpleFactoryModel;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RedirectResult extends Result {

	public RedirectResult(String path) {
		super(path);
	}

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) {
		// 重定向操作
		try {
			response.sendRedirect(path);
		} catch (IOException e) {
			throw new RuntimeException(e);
		}

	}

}

简单工厂模式的优缺点分析(借鉴一下,总结的很好):

       优点:工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。

      缺点:由于工厂类集中了所有实例的创建逻辑,这就直接导致一旦这个工厂出了问题,所有的客户端都会受到牵连;而且由于简单工厂模式的产品室基于一个共同的抽象类或者接口,这样一来,但产品的种类增加的时候,即有不同的产品接口或者抽象类的时候,工厂类就需要判断何时创建何种种类的产品,这就和创建何种种类产品的产品相互混淆在了一起,违背了单一职责,导致系统丧失灵活性和可维护性。而且更重要的是,简单工厂模式违背了“开放封闭原则”,就是违背了“系统对扩展开放,对修改关闭”的原则,因为当我新增加一个产品的时候必须修改工厂类,相应的工厂类就需要重新编译一遍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值