工厂模式简介

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
在这里插入图片描述

实例

对于多端应用 有桌面版首页和手机版首页
在这里插入图片描述

访问 /index.html (这不是页面,是一个servlet) ,自动根据request请求头中的参数判断是电脑/手机,然后进行请求转发

servlet

@WebServlet("/index.html")
public class IndexServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Device d = DeviceFactory.getDevice(request);//利用工厂模式创建对象
        //根据 request 中的请求确定创建的 DesktopDevice/MobieDevice 对象
        request.getRequestDispatcher(d.getIndex()).forward(request, response);
    }
}

Device (interface)

public interface Device {
    String getIndex();
}

实现类

public class DesktopDevice implements Device{
    @Override
    public String getIndex() {
        return "/desktop/index.html";
    }
}
public class MobieDevice implements Device{
    @Override
    public String getIndex() {
        return "/mobie/index.html";
    }
}

创建Factory工厂类,动态创建对象

package com.br.device;

import javax.servlet.http.HttpServletRequest;

public class DeviceFactory {
    public static Device getDevice(HttpServletRequest request){
        String userAgent = request.getHeader("user-agent");
        System.out.println(userAgent);
        if(userAgent.indexOf("Windows NT") != -1) {
            return new DesktopDevice();
        }else if(userAgent.indexOf("iPhone") != -1 || userAgent.indexOf("Android") != -1) {
            return new MobieDevice();
        }else {
            return null;
        }
    }
}

使用简单工厂可以将创建对象的任务交给工厂类,用户类只需信任这个工厂类