程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 以Java代碼為例講授設計形式中的簡略工場形式

以Java代碼為例講授設計形式中的簡略工場形式

編輯:關於JAVA

以Java代碼為例講授設計形式中的簡略工場形式。本站提示廣大學習愛好者:(以Java代碼為例講授設計形式中的簡略工場形式)文章只能為提供參考,不一定能成為您想要的結果。以下是以Java代碼為例講授設計形式中的簡略工場形式正文


1. 簡略工場形式簡介
簡略工場形式(Simple Factory),又被稱為"靜態工場辦法形式"。它屬於"創立形式"(創立對象的形式),而且是"工場辦法"形式的一種特別完成。
平日,我們應用簡略工場形式來停止類的創立。例如,獲得線程池對象,就是經由過程簡略工場形式來完成的。它的構造圖以下所示:

工場:工場是簡略工場形式的焦點,供給了對外接口。客戶端或其它法式要獲得Product對象,都是經由過程Factory的接口來獲得的。
籠統產物:籠統產物是(很多)分歧產物籠統出來的。Product可所以接口或許籠統類。
詳細產物:工場中前往的產物對象,現實上是經由過程ConcreteProduct來創立的。

2. 簡略工場形式代碼模子

public class Factory {
 public static Product newInstance() {
  return new ConcreteProduct();
 }
}
public abstract Product {
}
public class ConcreteProduct extends Product {
 public ConcreteProduct() {}
}

模子的類圖

3.簡略工場形式的現實運用

我們在寫一個Servlet處置客戶端要求的時刻, 常常會一個Servlet處置多個營業邏輯, 好比:

protected void doPost(HttpServletRequest request, HttpServletResponse response) {
 String flag = request.getParameter("flag");
 if(flag.equals("service1")) {
  service1();
 }else if(flag.equals("service2")) {
  service2();
 }
 ...
}

以上是我們的Servlet處置多營業邏輯的慣例辦法, 寫一坨if else語句。一種比擬好的方法就是, 將要求的分發與Servlet分別, 讓Servlet只處置營業邏輯。我們把各類要求的Servlet看作產物類, javax.servlet.HttpServlet是產物父類, javax.servlet.Servlet是產物接口, 如許我們界說一個ServletFactory, 在過濾器裡解析url要求並交給ServletFactory來處置便可以了。 這就是一個典范的簡略工場運用。

@WebFilter("/TransRequest")
public class TransRequest implements Filter{
 private String servletName;
 @Override
 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  HttpServletRequest myRequest = (HttpServletRequest)request;
  //拿到要求的servlet名字, 這裡我們商定要求都是/servletName情勢
  String names[] = myRequest.getRequestURI().trim().split("/");
  servletName = names[2];
  if( servletName != null) {
  //以下是最典范的兩句簡略工場的例子
   Servlet servlet = ServletFactory.createServlet(servletName);
   servlet.service(request, response);
  }else
   chain.doFilter(request, response);
 }

每次來一個要求我們用工場臨盆一個servlet, 如許可以避免去在xml設置裝備擺設年夜量的servlet途徑信息比擬便利。並且如許也會使邏輯加倍清楚, servlet僅僅就是在營業層處置營業。
工場類以下:

public class ServletFactory {
 public static Servlet createServlet(String servletName) throws ServletException {
  if(servletName.equals("servletName1")) {
   return new Service1();
  }else if(servletName.equals("servletName2")){
   return new Service2();
  }else{
   throw new ServletException("No such servlet");
  }
 }
}

下面的工場類固然沒有拋開繁瑣的if else, 然則應用簡略工場的思惟依然處理了一些成績。簡略工場長短常簡略的一種算不上設計形式的設計形式, 處理的成績也很無限。 以上要求分發各年夜javaEE 框架都已完成, 例如Struts2, 固然框架不是用的簡略工場。

4.總結

簡略工場形式, 總結起來就是一個工場類,一個產物接口(其實也能夠是一個籠統類,乃至一個通俗的父類)和一群完成了產物接口的詳細產物,而這個工場類,依據傳入的參數去發明一個詳細的完成類,並向上轉型為接口作為成果前往。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved