设计模式(1) -- 简单工厂模式

简单工厂模式 -- 其本质就是由工厂类根据外部因素去选择的创建一个实例。

     

 简单工厂模式模型:接口IProduct  +  工厂类Creator

 接口和实现类:

public interface IProduct { 
    public void printSomethingByType();   
}
public class Product_A implements IProduct {
    public void printSomethingByType() {
       System.out.println("-----用户one执行----");
    }
}
public class Product_B implements IProduct {
    public void printSomethingByType() {
       System.out.println("-----用户two执行----");
    }
}

  工厂类:

    

public class Creator {
    public IProduct factory(String type) {  
        if ("One".equals(type)) {  
            return new Product_A();  
        } else if ("Two".equals(type)) {  
            return new Product_B();  
        } else {  
            System.out.println("没有要找的类型");  
            return null;  
        }  
    }
}

--------

  左潇龙大神博客里面提到了简单工厂的的一些实际应用,我学习一下。(http://www.cnblogs.com/zuoxiaolong/p/pattern4.html)

  在使用Strust2开发的时候,一般一个servlet只会处理一个具体的业务请求,随着业务量的增加,会导致在web.xml里面配置servlet的配置。

  如果要实现将几个业务处理整合到一个servlet中去:

protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException {
//我们加入一个操作的参数,来让servlet做出不同的业务处理 String operation = req.getParameter("operation");
if(operation.equals("login")){
System.out.println("login");
}else if (operation.equals("register")) {
System.out.println("register");

}else if (operation.equals("loginout")) {
System.out.println("loginout");

}else {
throw new RuntimeException("invalid operation");
}

}

如果你的项目中出现了这种代码结构,请务必想办法去掉它,你完全可以尽量忘掉Java里还有elseif和swich

  也可以将各个分支的业务逻辑拆分出来,成为一个相对的方法体。但是这样又违背了"单一原则"。因为我们的servlet应该只是处理业务逻辑,而不应该还要负责与业务逻辑不相关的处理方法定位这样的责任,这个责任应该交给请求方,原本在三个servlet分别处理登陆,注销和注册的时候,其实就是这样的,作为请求方,只要是请求 LoginServlet,就说明请求的人是要登陆,处理这个请求的servlet不需要再出现有关判断请求操作的代码。

    拦截器会拦截requestName,然后构建一个工厂类通过requestName来返回对应的实例!

---------------

    后续我会研究一下springmvc 路由控制的源码,看看是不是也有简单工厂模式的实现。

 

posted @ 2016-04-23 23:43  junjin4838  阅读(249)  评论(0编辑  收藏  举报