>Java >java지도 시간 >예제와 함께 JAVA 추상 팩토리 패턴에 대한 자세한 설명

예제와 함께 JAVA 추상 팩토리 패턴에 대한 자세한 설명

WBOY
WBOY앞으로
2022-04-20 12:50:492752검색

이 기사에서는 java에 대한 관련 지식을 소개합니다. 추상 팩토리 패턴이 무엇인지 알아보는 데 도움이 되기를 바랍니다. 모두에게 도움이 되었습니다.

예제와 함께 JAVA 추상 팩토리 패턴에 대한 자세한 설명

추천 학습: "java 비디오 튜토리얼"

추상 팩토리 패턴이란 무엇입니까?

추상 팩토리(AbstractFactory) 패턴의 정의:는 생성하기 위한 액세스 클래스를 제공하는 방법입니다. 일련의 관련 또는 상호 의존 개체의 인터페이스 및 액세스 클래스는 원하는 제품의 특정 클래스를 지정하지 않고도 다양한 수준에서 동일한 제품군의 제품 스키마 구조를 얻을 수 있습니다.

조건 충족:

  • 시스템에는 여러 제품군이 있으며, 각 특정 공장은 동일한 제품군의 제품을 생산하지만 서로 다른 계층 구조에 속합니다.
  • 시스템은 한 번에 한 가족의 제품만 소비할 수 있습니다. 즉, 같은 가족의 제품을 함께 사용할 수 있습니다.

장점:

  • 관리를 위해 여러 개의 새로운 클래스를 도입할 필요 없이 제품군 내에서 관련된 다단계 제품을 공동으로 관리할 수 있습니다.

  • 제품군이 필요할 때 추상 팩토리는 클라이언트가 항상 동일한 제품의 제품군만 사용하도록 보장할 수 있습니다.

  • 추상 팩토리는 프로그램의 확장성을 향상시킵니다. 새로운 제품군을 추가할 때 열기 및 닫기 원칙을 충족하기 위해 원본 코드를 수정할 필요가 없습니다.

단점:

  • 제품군에 새로운 제품을 추가해야 하는 경우 모든 팩토리 클래스를 수정해야 합니다. 시스템 이해의 추상성과 어려움이 증가합니다.

Implementation of Abstract Factory

사건의 주요 역할은 다음과 같습니다.
Abstract Factory(Abstract Factory) : 일곱 영웅의 계승자
Factory(SimpleFactory) : Master, Mistress
Abstract 제품(제품) : 운석(검을 만드는 원료), 비둘기알(부화하지 않은 비둘기) 둥지
콘크리트 제품 ​​: 세븐소드. 일곱 영혼 비둘기

사례:
주인은 일곱 영웅의 상속권을 가지며 태양의 검을 제조하고 수컷 작은 영혼 비둘기를 키울 수 있습니다.
주인의 아내는 칠영웅의 계승권을 갖고 있으며 음검을 단련하고 암비둘기를 키울 수 있습니다.
일곱 영웅은 주인과 아내를 찾아 자신만의 검을 만들고, 자신만의 작은 비둘기를 입양합니다.

추상적 생성물, product

S1 인터페이스(Meteorite):

메서드가 인터페이스에 선언됨

public interface S1 {
    void show();}

S2 인터페이스(비둘기 알의 둥지):

메서드가 선언됨 인터페이스 메소드

public interface S2 {
    void show();}

A1 클래스는 인터페이스 S1(Changhong Sword)을 구현합니다:

S1 인터페이스를 구현합니다

public class A1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把长虹剑");

    }}

B1 클래스는 인터페이스 S1(Ice Soul Sword)을 구현합니다:

S1 인터페이스를 구현합니다

public class B1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把冰魄剑");

    }}

C1 클래스는 인터페이스 S1 구현(Ziyun Sword):

S1 인터페이스 구현

public class C1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}

D1 클래스는 인터페이스 S1 구현(Yuhua Sword):

S1 인터페이스 구현

public class D1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}

E1 클래스 구현 인터페이스 S1(Blue Light Sword):

Ss 인터페이스 구현

public class E1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}

F1 클래스 구현 S1 인터페이스(Ben Lei Sword):

Ss 인터페이스 구현

public class F1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}

G1 클래스 구현 S1 인터페이스(Cyclone) Sword):

Ss 인터페이스 구현

public class G1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}

A2 클래스 구현 인터페이스 S2(Lingge No. 1):

S1 인터페이스 구현

public class A2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");

    }}

B2 클래스 구현 S2(Lingge No. 2) :

S1 인터페이스 구현

public class B2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");

    }}

C2 클래스 구현 S2(Lingge No. 3):

S1 인터페이스 구현

public class C2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}

D2 클래스 구현 S2(Lingge No. 4):

S1 인터페이스 구현

public class D2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}

E2 클래스 구현 인터페이스 S2(Lingge No. 5):

Ss 인터페이스 구현

public class E2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}

F2 클래스 구현 인터페이스 S2(Lingge No. 6):

Ss 인터페이스 구현

public class F2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}

G2 클래스는 인터페이스 S2(Lingge No. 7)를 구현합니다.

Ss 인터페이스 구현

public class G2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}

추상 팩토리, 공장

Zz 인터페이스(Seven Heroes 상속):

인터페이스는 검 만들기 방법 abc1()과 비둘기 키우기 방법 abc2()를 선언합니다.

public interface Zz {
    S1 abc1(String a);
    S2 abc2(String a);}

Nan 클래스는 인터페이스 Zz(마스터)를 구현합니다.

Zz 인터페이스를 구현합니다

public class Nan implements Zz {
    private static S1 s1;
    private static S2 s2;

    public S1 abc1(String a) {
        if ("长虹剑".equals(a)) {
            s1 = new A1();
        } else if ("奔雷剑".equals(a)) {
            s1 = new F1();
        } else if ("青光剑".equals(a)) {
            s1 = new E1();
        } else if ("雨花剑".equals(a)) {
            s1 = new D1();
        } else if ("旋风剑".equals(a)) {
            s1 = new G1();
        } else {
            System.out.println("铸剑失败");
        }
        return s1;
    }
    public S2 abc2(String a) {
        if ("灵鸽一号".equals(a)) {
            s2 = new A2();
        } else if ("灵鸽二号".equals(a)) {
            s2 = new F2();
        } else if ("灵鸽三号".equals(a)) {
            s2 = new E2();
        } else if ("灵鸽四号".equals(a)) {
            s2 = new D2();
        } else if ("灵鸽五号".equals(a)) {
            s2 = new G2();
        } else {
            System.out.println("领养失败");
        }
        return s2;
    }}

Nv 클래스는 Zz(주인의 아내) 인터페이스를 구현합니다:

Zz 인터페이스 구현

public class Nv implements Zz {
    private static S1 s1;
    private static S2 s2;

    public S1 abc1(String a) {
        if ("冰魄剑".equals(a)) {
            s1 = new B1();
        } else if ("紫云剑".equals(a)) {
            s1 = new C1();
        } else {
            System.out.println("铸剑失败");
        }
        return s1;
    }
    public S2 abc2(String a) {
        if ("灵鸽六号".equals(a)) {
            s2 = new B2();
        } else if ("灵鸽七号".equals(a)) {
            s2 = new C2();
        } else {
            System.out.println("领养失败");
        }
        return s2;
    }}

Test

테스트 카테고리:

public class Demo {
    public static void main(String[] args) {
        System.out.println("---------至阳传承-------------");
        //师傅
        Nan nan = new Nan();
        //造剑
        S1 a1 = nan.abc1("长虹剑");
        S1 d1 = nan.abc1("雨花剑");
        S1 e1 = nan.abc1("青光剑");
        S1 f1 = nan.abc1("奔雷剑");
        S1 g1 = nan.abc1("旋风剑");
        //养鸽子
        S2 a2 = nan.abc2("灵鸽一号");
        S2 d2 = nan.abc2("灵鸽二号");
        S2 e2 = nan.abc2("灵鸽三号");
        S2 f2 = nan.abc2("灵鸽四号");
        S2 g2 = nan.abc2("灵鸽五号");
        a1.show();
        d1.show();
        e1.show();
        f1.show();
        g1.show();
        a2.show();
        d2.show();
        e2.show();
        f2.show();
        g2.show();
        System.out.println("---------至阴传承-------------");
        //女铸剑师
        Nv nv = new Nv();
        S1 b1 = nv.abc1("冰魄剑");
        S1 c1 = nv.abc1("紫云剑");
        b1.show();
        c1.show();
        S2 b2 = nv.abc2("灵鸽六号");
        S2 c2 = nv.abc2("灵鸽七号");
        b2.show();
        c2.show();
    }}

추천 학습: "java 비디오 튜토리얼"

위 내용은 예제와 함께 JAVA 추상 팩토리 패턴에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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