>Java >java지도 시간 >Java 팩토리 메소드 패턴에 대한 자세한 설명

Java 팩토리 메소드 패턴에 대한 자세한 설명

WBOY
WBOY앞으로
2022-04-02 12:45:374742검색

이 기사에서는 팩토리 메소드 패턴과 관련된 문제를 주로 소개하는 java에 대한 관련 지식을 제공합니다. 팩토리 메소드 패턴은 가상 생성자 패턴 또는 다형성 팩토리 패턴이라고도 합니다. 모두를 돕습니다.

Java 팩토리 메소드 패턴에 대한 자세한 설명

추천 학습: "java tutorial"

1. 팩토리 메소드 패턴이란 무엇인가요?

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

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

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

예:

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

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

장점:

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

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

  • 전형적인 디커플링 프레임워크입니다. 상위 모듈은 제품의 추상 클래스만 알면 되며 다른 구현 클래스는 신경 쓸 필요가 없습니다. 데메테르의 법칙, 종속성 반전 원리 및 리히터 대체 원리를 만족합니다.

단점:

  • 클래스 수가 너무 많아짐 복잡성 증가

  • 시스템의 추상화 및 이해 난이도 증가

  • 추상 제품은 하나의 제품만 생산할 수 있습니다. 이러한 단점은 추상 팩토리 패턴(추상 팩토리 패턴)을 사용하여 해결할 수 있습니다.

3. 패턴의 구조 및 구현

구조는 다음 4가지 부분으로 구성됩니다.

  • Abstract Factory(Abstract Factory): 이를 통해 제품을 생성하기 위한 인터페이스를 제공합니다. 호출자는 특정 팩토리의 팩토리 메소드 newProduct()에 액세스합니다. 제품을 생성하려면

  • 콘크리트 팩토리(ConcreteFactory): 주로 추상 팩토리에 추상 메소드를 구현하여 특정 제품

  • 추상 제품(Product)을 생성합니다. ): 제품의 사양을 정의하고 제품의 주요 특징과 기능을 설명합니다.

  • 콘크리트 제품(ConcreteProduct): 추상적인 제품 역할로 정의된 인터페이스를 구현하며 특정 공장에서 생성됩니다. 특정 공장과의 일대일 대응

구조 다이어그램:

Java 팩토리 메소드 패턴에 대한 자세한 설명

4. 팩토리 메소드 패턴 코드 구현

이전 기사의 Coke 공장을 예로 들어 보겠습니다.
제품은 다음과 같습니다. 코카콜라, 펩시콜라, 무설탕 콜라
단순 공장 모드에서는 세 가지 제품을 생산할 수 있는 코카콜라 공장이 하나만 있고, 공장 방식 패턴에서는 해당 제품을 생산하는 여러 공장이 있을 수 있습니다.

추상 공장: 코카콜라 공장(주 공장으로 이해 가능)
펩시콜라 공장: 펩시콜라 생성
코카콜라 공장: 코카콜라 생성
무설탕 콜라 공장: 무설탕 생성 콜라

콜라 생성 방법:

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

    //生产可乐的方法
    public void cola();}

Cola 추상 공장:

/**
 * 可乐抽象工厂(可以理解成可乐总厂,旗下还有很多分厂)
 */public interface ColaFactory {

    public Cola newCola();}

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

/**
 * 产品名称:可乐可乐,实现了产品的接口
 */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("开始生产百事可乐");
    }}

S 무설탕 콜라:

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

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

3개의 제품은 3개의 공장에 해당합니다:

코카콜라를 생산하는 공장:

/**
 *
 * 具体工厂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

我是可乐工厂下面的可口可乐工厂
开始生产可口可乐

5、总结

这就是工厂方法模式,和简单工厂模式有所不同,在这个模式内有一个抽象工厂接口,也就是你需要增加新产品后,不需要在原本的工厂内去修改代码,而是直接新建一个工厂,去实现抽象工厂即可,也是符合了开闭原则。

当然缺点也就是工厂多了,管理变得复杂,也增加了系统的抽象性和理解难度,而且抽象产品只能生产一种产品,但是此弊端可使用抽象工厂模式解决(抽象工厂模式在下一篇文章)

推荐学习:《java教程

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

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