팩토리 메소드 패턴: 가상 생성자 패턴 또는 다형성 팩토리 패턴이라고도 하며 클래스 생성 패턴에 속합니다.
팩토리 메소드 패턴에서 팩토리 상위 클래스는 제품 객체 생성을 위한 공개 인터페이스를 정의하는 역할을 담당하고, 팩토리 하위 클래스는 특정 제품 객체 생성을 담당합니다. 이 클래스의 목적은 제품 클래스의 인스턴스화를 지연시키는 것입니다. 프로세스에서 완료된 공장 하위 클래스, 즉 공장 하위 클래스를 사용하여 인스턴스화해야 하는 특정 제품 클래스를 결정합니다.
우리는 오늘날 실제 공장의 분업이 점점 더 세부적이고 전문화되고 있다는 것을 알고 있습니다. . 다양한 제품을 전문공장에서 생산하여 자급자족하는 소규모 농민경제 시대에 완전히 이별하여 제품의 생산주기를 대폭 단축하고 생산효율을 향상시킵니다. 팩토리 메소드 패턴은 열기 및 닫기 원리를 만족할 뿐만 아니라 간단한 팩토리 패턴의 장점도 계승합니다.
예:
간단한 팩토리 패턴에 대한 기사의 Coke 팩토리에는 팩토리 클래스가 하나뿐이므로 이 클래스에서 모든 제품을 수정하고 조정해야 하며 팩토리 메소드 패턴에는 각각 여러 개의 팩토리가 있습니다. 공장은 하나의 제품을 생산하며, 새로운 제품을 추가해야 할 경우 다른 공장 내부에서 직접 수정할 필요가 없습니다.
장점:
사용자는 제품의 구체적인 생성 과정을 알지 못해도 특정 공장의 이름만 알면 원하는 제품을 얻을 수 있습니다
향상된 유연성, 새로운 제품을 생성하려면 해당 팩토리 클래스를 하나만 더 작성하면 됩니다.
전형적인 디커플링 프레임워크입니다. 데메테르의 법칙, 종속성 역전 원리 및 리히터 대체 원리에 따라 상위 모듈은 다른 구현 클래스를 고려하지 않고 제품의 추상 클래스에만 액세스하면 됩니다. 단점: 클래스 수가 너무 많아지기 쉽습니다
증가합니다. 시스템의 추상화와 이해의 어려움
을 사용하여 해결할 수 있습니다. (추상적 팩토리 패턴은 다음 글에 있습니다)
3. 패턴 구현
추상 팩토리(Abstract Factory): 호출자가 특정 팩토리의 newProduct() 팩토리 메소드에 액세스하는 제품 생성을 위한 인터페이스를 제공합니다. create product
제품은 Coca-Cola, Pepsi-Cola, Sugar Free Coke
입니다. 단순 공장 모드에서는 세 가지 제품을 생산할 수 있는 코카콜라 공장이 하나만 있고, 팩토리 메소드 패턴에서는 해당 제품을 생산하는 여러 공장이 있을 수 있습니다.펩시콜라 공장:
펩시콜라 생성코카콜라 공장:
코카콜라 생성
무설탕 콜라 공장:무설탕 콜라 생성
콜라 생산 방법:
/** * 提供了产品的接口 */public interface Cola { //生产可乐的方法 public void cola();}
/** * 可乐抽象工厂(可以理解成可乐总厂,旗下还有很多分厂) */public interface ColaFactory { public Cola newCola();}
Coke Coke:
/** * 产品名称:可乐可乐,实现了产品的接口 */public class CocaCola implements Cola{ @Override public void cola() { System.out.println("开始生产可口可乐"); }}
/** * * 产品名称:百事可乐,实现了产品的接口 */public class PepsiCola implements Cola{ @Override public void cola() { System.out.println("开始生产百事可乐"); }}
/* * 产品名称:无糖可乐,实现了产品的接口 */public class SugarFreeCola implements Cola{ @Override public void cola() { System.out.println("开始生产无糖可乐"); }}
세 가지 제품은 세 가지 공장에 해당합니다.
The 코카콜라를 생산하는 공장:
/** * * 具体工厂1:可口可乐工厂 */public class CocaColaFactory implements ColaFactory{ @Override public Cola newCola() { System.out.println("我是可乐工厂下面的可口可乐工厂"); return new CocaCola(); }}
펩시콜라를 생산하는 공장:
/** * * 具体工厂2:百事可乐工厂 */public class PepsiColaFactory implements ColaFactory{ @Override public Cola newCola() { System.out.println("我是可乐工厂下面的百事可乐工厂"); return new PepsiCola(); }}
무설탕 콜라를 생산하는 공장:
/* * 具体工厂3:无糖可乐工厂 */public class SugarFreeColaFactory implements ColaFactory{ @Override public Cola newCola() { System.out.println("我是可乐工厂下面的无糖可乐工厂"); return new SugarFreeCola(); }}
지금까지 다음이 있습니다:
콜라를 생산하는 한 가지 방법
콜라 공장(아래에 여러 개의 작은 공장이 있음)
public class Test { public static void main(String[] args) { try{ //新建一个可乐方法对象 Cola a; //新建一个可乐工厂对象 ColaFactory af; //告诉可乐工厂,你需要什么可乐,并且通知对应的分工厂 af = (ColaFactory) new PepsiColaFactory(); //执行对于生产方法 a = af.newCola(); a.cola(); }catch (Exception e ){ System.out.println(e.getMessage()); } }}
我是可乐工厂下面的无糖可乐工厂 开始生产无糖可乐
我是可乐工厂下面的可口可乐工厂 开始生产可口可乐
위 내용은 Java 팩토리 메소드 패턴을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!