>Java >java지도 시간 >Java 팩토리 메소드 패턴을 구현하는 방법

Java 팩토리 메소드 패턴을 구현하는 방법

王林
王林앞으로
2023-05-20 22:19:151206검색

Java 팩토리 메소드 패턴을 구현하는 방법


1. 팩토리 메소드 패턴이란?

팩토리 메소드 패턴: 가상 생성자 패턴 또는 다형성 팩토리 패턴이라고도 하며 클래스 생성 패턴에 속합니다.

팩토리 메소드 패턴에서 팩토리 상위 클래스는 제품 객체 생성을 위한 공개 인터페이스를 정의하는 역할을 담당하고, 팩토리 하위 클래스는 특정 제품 객체 생성을 담당합니다. 이 클래스의 목적은 제품 클래스의 인스턴스화를 지연시키는 것입니다. 프로세스에서 완료된 공장 하위 클래스, 즉 공장 하위 클래스를 사용하여 인스턴스화해야 하는 특정 제품 클래스를 결정합니다.

우리는 오늘날 실제 공장의 분업이 점점 더 세부적이고 전문화되고 있다는 것을 알고 있습니다. . 다양한 제품을 전문공장에서 생산하여 자급자족하는 소규모 농민경제 시대에 완전히 이별하여 제품의 생산주기를 대폭 단축하고 생산효율을 향상시킵니다. 팩토리 메소드 패턴은 열기 및 닫기 원리를 만족할 뿐만 아니라 간단한 팩토리 패턴의 장점도 계승합니다.

예:

간단한 팩토리 패턴에 대한 기사의 Coke 팩토리에는 팩토리 클래스가 하나뿐이므로 이 클래스에서 모든 제품을 수정하고 조정해야 하며 팩토리 메소드 패턴에는 각각 여러 개의 팩토리가 있습니다. 공장은 하나의 제품을 생산하며, 새로운 제품을 추가해야 할 경우 다른 공장 내부에서 직접 수정할 필요가 없습니다.

2. 팩토리 메소드 패턴의 장점과 단점

장점:

  • 사용자는 제품의 구체적인 생성 과정을 알지 못해도 특정 공장의 이름만 알면 원하는 제품을 얻을 수 있습니다

  • 향상된 유연성, 새로운 제품을 생성하려면 해당 팩토리 클래스를 하나만 더 작성하면 됩니다.

  • 전형적인 디커플링 프레임워크입니다. 데메테르의 법칙, 종속성 역전 원리 및 리히터 대체 원리에 따라 상위 모듈은 다른 구현 클래스를 고려하지 않고 제품의 추상 클래스에만 액세스하면 됩니다. 단점: 클래스 수가 너무 많아지기 쉽습니다

증가합니다. 시스템의 추상화와 이해의 어려움

    추상적 제품은 하나의 제품만 생산할 수 있습니다. 이 단점은
  • 추상적 팩토리 패턴

    을 사용하여 해결할 수 있습니다. (추상적 팩토리 패턴은 다음 글에 있습니다)

  • 3. 패턴 구현

  • 구조는 다음 네 부분으로 구성됩니다.
  • 추상 팩토리(Abstract Factory): 호출자가 특정 팩토리의 newProduct() 팩토리 메소드에 액세스하는 제품 생성을 위한 인터페이스를 제공합니다. create product

Concrete Factory(ConcreteFactory): 주로 추상 팩토리에서 추상 메소드를 구현하여 특정 제품의 생성을 완료합니다

    Abstract Product(제품): 제품의 사양을 정의하고 주요 기능을 설명합니다. 제품과 기능
  • 콘크리트 제품(ConcreteProduct): 추상적인 제품 역할로 정의된 인터페이스를 구현하고 특정 공장에서 생성되며 특정 공장과 일대일 대응을 가집니다
  • 구조적입니다. 다이어그램:

  • 4. 팩토리 메소드 패턴 코드 구현
이전 기사의 Coke 공장을 예로 들어 보겠습니다.

제품은 Coca-Cola, Pepsi-Cola, Sugar Free Coke

입니다. 단순 공장 모드에서는 세 가지 제품을 생산할 수 있는 코카콜라 공장이 하나만 있고, 팩토리 메소드 패턴에서는 해당 제품을 생산하는 여러 공장이 있을 수 있습니다.

Java 팩토리 메소드 패턴을 구현하는 방법

추상 공장:

코카콜라 공장(주 공장으로 이해 가능) )

펩시콜라 공장:
펩시콜라 생성 코카콜라 공장:
코카콜라 생성

무설탕 콜라 공장: 무설탕 콜라 생성
콜라 생산 방법:

/**
 *  提供了产品的接口
 */public interface Cola {

    //生产可乐的方法
    public void cola();}
Cola Abstract Factory:
/**
 * 可乐抽象工厂(可以理解成可乐总厂,旗下还有很多分厂)
 */public interface ColaFactory {

    public Cola newCola();}

세 가지 유형의 콜라를 생성하는 방법:

Coke Coke:

/**
 * 产品名称:可乐可乐,实现了产品的接口
 */public class CocaCola implements Cola{

    @Override
    public void cola() {
        System.out.println("开始生产可口可乐");
    }}

Pepsi :

/**
 *
 * 产品名称:百事可乐,实现了产品的接口
 */public class PepsiCola implements Cola{

    @Override
    public void cola() {
        System.out.println("开始生产百事可乐");
    }}
Sugar-free Coke:
/*
 * 产品名称:无糖可乐,实现了产品的接口
 */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());
            }
        }}
  • 예를 들어 지금 Pepsi가 필요한 경우 af에 Pepsi 공장을 전달합니다.
  • 我是可乐工厂下面的无糖可乐工厂
    开始生产无糖可乐

    CocaColaFactory
  • 에 전달된 경우:
我是可乐工厂下面的可口可乐工厂
开始生产可口可乐

위 내용은 Java 팩토리 메소드 패턴을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제