1. 간단한 공장 모델 소개
"정적 공장 방법 모드"라고도하는 간단한 공장 모드. "생성 모드"(객체 생성 패턴)에 속하며 "공장 메소드"패턴의 특별한 구현입니다.
일반적으로 간단한 공장 패턴을 사용하여 클래스를 만듭니다. 예를 들어, 스레드 풀 객체를 얻는 것은 간단한 공장 모드를 통해 달성됩니다. 구조 다이어그램은 다음과 같습니다.
공장 : 공장은 간단한 공장 모델의 핵심이며 외부 인터페이스를 제공합니다. 클라이언트 또는 기타 프로그램이 제품 객체를 얻으려면 공장 인터페이스를 통해 얻습니다.
초록 제품 : 초록 제품은 (많은) 다른 제품으로 추상화됩니다. 제품은 인터페이스 또는 추상 클래스 일 수 있습니다.
특정 제품 : 공장에서 반환 된 제품 객체는 실제로 ConcreteProduct를 통해 생성됩니다.
2. 간단한 공장 패턴 코드 모델
공개 클래스 공장 {public static product newinstance () {return new ConcreteProduct (); }} 공개 초록 제품 {} 공공 클래스 ConcreteProduct 확장 제품 {public concreteproduct () {}} 모델의 클래스 다이어그램
3. 간단한 공장 모델의 실제 적용
클라이언트 요청을 처리하기 위해 서블릿을 작성할 때, 우리는 종종 하나의 서블릿에서 여러 비즈니스 로직을 처리합니다.
보호 된 void dopost (httpservletrequest 요청, httpservletResponse 응답) {String flag = request.getParameter ( "flag"); if (flag.equals ( "service1")) {service1 (); } else if (flag.equals ( "service2")) {service2 (); } ...}위의 것은 다중 비즈니스 논리를 처리하고 다른 명령문을 작성하는 우리의 서블릿의 일반적인 방법입니다. 더 좋은 방법은 요청 된 분포를 서블릿과 분리하여 서블릿이 비즈니스 로직 만 처리하는 것입니다. 우리는 다양한 요청 된 서블릿을 제품 클래스로 간주합니다. javax.servlet.httpservlet은 제품 부모 클래스이며 javax.servlet.servlet은 제품 인터페이스입니다. 이런 식으로, 우리는 servletfactory를 정의하고, 필터의 URL 요청을 구문 분석하고, 처리를 위해 servletfactory로 넘겨줍니다. 이것은 전형적인 간단한 공장 응용 프로그램입니다.
@WebFilter ( "/transRequest") public class transRequest emplements 필터 {private String servletname; @override public void dofilter (servletrequest 요청, servletreponse 응답, 필터 체인 체인)는 ioexception, servletexception {httpservletrequest myrequest = (httpservletrequest) 요청; // 요청 된 서블릿 이름을 가져옵니다. 여기서 우리는 요청이/servletname string 이름의 형태 [] = myRequest.getRequestUri (). trim (). split ( "/")에 동의합니다. servletname = 이름 [2]; if (servletname! = null) {// 다음은 간단한 공장 servlet servlet = servletfactory.createservlet (servletname)의 가장 일반적인 예입니다. Servlet.Service (요청, 응답); } else Chain.dofilter (요청, 응답); } 요청을 요청할 때마다 공장을 사용하여 XML에서 많은 양의 서블릿 경로 정보를 구성하지 않을 수있는 서블릿을 생성합니다. 그리고 이것은 또한 논리를 더 명확하게 만들 것이며, 서블릿은 비즈니스 수준에서만 비즈니스를 처리합니다.
공장 카테고리는 다음과 같습니다.
공개 클래스 servletfactory {public static servlet createServlet (string servletname)가 servletexception {if (servletname.equals ( "servletname1"))) {return new service1 (); } else if (servletname.equals ( "servletname2")) {return new service2 (); } else {Throw New ServleTeXception ( "그러한 서블릿 없음"); }}}위의 공장 클래스는 다른 경우 번거로운 것을 제쳐두고 있지 않지만 간단한 공장을 사용한다는 아이디어는 여전히 일부 문제를 해결합니다. 간단한 공장은 설계 패턴으로 간주 될 수없는 매우 간단한 디자인 패턴이며 해결 된 문제도 제한적입니다. 위의 요청 배포가 구현되었습니다. 예를 들어, struts2는 물론 프레임 워크는 단순한 공장이 아닙니다.
4. 요약
요약 할 간단한 공장 모델은 공장 클래스, 제품 인터페이스 (실제로는 추상 클래스 또는 일반 부모 클래스 일 수도 있음) 및 제품 인터페이스를 구현하는 특정 제품 그룹입니다. 이 공장 클래스는 전달 된 매개 변수를 기반으로 특정 구현 클래스를 생성하고 결과적으로 인터페이스로 변환합니다.