工厂模式

it2023-08-08  65

工厂模式

关于工厂模式

工厂模式用于隐藏创建对象的细节工厂模式核心:工厂类(Factory)工厂模式可细分为简单工厂、工厂方法与抽象工厂

简单工厂

项目应用1(I18N项目国际化)

I18N接口

package com.imooc.factory.i18n; //Internationalization public interface I18N { public String getTitle(); }

Chinese.java-> I18接口的实现类

package com.imooc.factory.i18n; public class Chinese implements I18N{ public String getTitle() { return "人事管理系统"; } }

Spanish.java-> I18接口的实现类

package com.imooc.factory.i18n; public class Spanish implements I18N { public String getTitle() { return "Sistema de gestión del personal"; } }

Italian.java-> I18接口的实现类

package com.imooc.factory.i18n; public final class Italian implements I18N{ public String getTitle() { return "Sistema de gestión del personal"; } }

I18NFactory.java

package com.imooc.factory.i18n; public class I18NFactory { //静态工厂 public static I18N getI18NObject(String area) { if ("china".equalsIgnoreCase(area)) { return new Chinese(); }else if("spain".equalsIgnoreCase(area)) { return new Spanish(); }else if("Italy".equalsIgnoreCase(area)) { return new Italian(); }else { return null; } } }

Software.java

package com.imooc.factory; import com.imooc.factory.i18n.I18N; import com.imooc.factory.i18n.I18NFactory; public class Software { public static void main(String[] args) { I18N i18n = I18NFactory.getI18NObject("china"); System.out.println(i18n.getTitle()); } }

项目应用2(多端应用切换)

创建一个动态web工程

在web目录下创建俩个目录,一个为desktop,另一个为mobile,在俩个文件夹中创建index.html并写入对应的内容

在src下创建com.imooc.servlet包,在这个包下创建IndexServlet的serlvet程序

在com.imooc.servlet下再创建一个device包,在里面创建deviceDevice接口、DesktopDevice类、MobileDevice类、DeviceFactory类、

mobile/index.html

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>这是手机端界面</h1> </body> </html>

desktop/index.html

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>这是PC端界面</h1> </body> </html>

MobileDevice.java

package com.imooc.servlet.device; public class MobileDevice implements Device{ public String getIndex() { return "/mobile/index.html"; } public String getDescription() { return "/mobile/desc.html"; } }

DesktopDevice.java

package com.imooc.servlet.device; public class DesktopDevice implements Device{ public String getIndex() { return "/desktop/index.html"; } public String getDescription() { return "/desktop/desc.html"; } }

Device.java

package com.imooc.servlet.device; public interface Device { public String getIndex(); public String getDescription(); }

DeviceFactory.java

package com.imooc.servlet.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 MobileDevice(); } return null; } }

IndexServlet.java

package com.imooc.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.imooc.servlet.device.Device; import com.imooc.servlet.device.DeviceFactory; /** * Servlet implementation class IndexServlet */ @WebServlet("/index.html") public class IndexServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public IndexServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub Device device = DeviceFactory.getDevice(request); request.getRequestDispatcher(device.getIndex()).forward(request, response);; } }
最新回复(0)