简单工厂设计模式应用:学生管理系统

今天看了一下简单工厂设计模式,突然觉得可以替代学生管理系统的部分内容,就按照工厂模式的套路整了一下,不过这还只是一个结构,具体内容的填充还需要在逐步测试中进行。

共有三部分:工厂类、“零件”的基类、零件。

工厂类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版权协议,转载请附上原文出处链接和本声明。