今天看了一下简单工厂设计模式,突然觉得可以替代学生管理系统的部分内容,就按照工厂模式的套路整了一下,不过这还只是一个结构,具体内容的填充还需要在逐步测试中进行。
共有三部分:工厂类、“零件”的基类、零件。
工厂类OptionFactory:
public abstract class OptionFactory {
public static Option createOption(String option) {
if (option == null) {
return null;
}
Option op = null;
switch (option) {
case "login":
op = new OptionLogin();
break;
default:
break;
}
return op;
}
}零件的基类Option:
public abstract class Option {
/**
* 根据选择跳转页面
*
* @param request HttpRequest对象
* @param response HttpResponse对象
*/
public abstract void forward(HttpServletRequest request, HttpServletResponse response);
/**
* 根据选择处理提交上来的数据
*
* @param request HttpRequest对象
* @param response HttpResponse对象
*/
public abstract void submit(HttpServletRequest request, HttpServletResponse response);
}零件类OptionLogin:
(零件可以有很多,目前先放上一个登录)
public class OptionLogin extends Option {
@Override
public void forward(HttpServletRequest request, HttpServletResponse response) {
System.out.println("OptionLogin.forward");
}
@Override
public void submit(HttpServletRequest request, HttpServletResponse response) {
System.out.println("OptionLogin.submit");
}
}这样的话框架就搭好了,下面说一下基本用法。
当有请求发送过来时,可以设定一个参数option,然后调用工厂类OptionFactory的createOption方法,这样就能够获取到相对应的类(这里有多态的成分)。
获取到具体类后,可以根据情况调用forward和submit方法,比如我这里设定的是,如果发生的是跳转到某个对应的页面,那么就调用forward方法;如果需要处理某些参数,最后的最后才跳转,那么就调用submit方法。
总之,核心要点就是,工厂类中会包含有一个零件基类,在没有选择之前,并不关心这个基类是谁产生的,当工厂中的创造零件方法被调用时,说明具体的零件类被加工了出来,返回给调用它的人,那个人拿到之后,就可以使用此零件了。
但是需要注意的是,继承了同一个基类的零件们,只能使用基类的公共方法,如果强行使用自身方法,那就相当于失去了工厂设计模式的初衷了。
一句话:简单工厂设计模式是螺丝厂,用户要什么规格的螺丝,它就给用户什么样的螺丝,用户拿到螺丝,只能用作固定支架、修补管道等螺丝能做的工作,不会因为规格不同而区别对待。
版权声明:本文为NewReErWen原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。