> Java > java지도 시간 > Java 디자인 패턴 전략 패턴 예시 분석

Java 디자인 패턴 전략 패턴 예시 분석

WBOY
풀어 주다: 2023-05-02 16:49:07
앞으로
1373명이 탐색했습니다.

1. 기본 소개

1) Strategy Pattern에서는 알고리즘 패밀리(전략 그룹)를 별도로 정의하고 캡슐화하여 서로 교체할 수 있도록 합니다. 이 모드는 알고리즘을 사용하는 고객과 독립적으로 알고리즘을 변경합니다. ) 이 알고리즘은 여러 가지 설계 원칙을 구현합니다. 첫째, 변경된 코드와 변경되지 않은 코드를 분리합니다. 둘째, 특정 클래스가 아닌 인터페이스용으로 프로그래밍됩니다(전략적 인터페이스가 정의됨). 셋째, 다목적 조합/집계, 상속을 덜 사용합니다. 전략을 조합하여 사용)

예: 환경 에너지 절약을 위해 세 가지 에너지 절약 방법이 제안됩니다: 베이스밴드 보드 에너지 절약, SPC 에너지 절약, 제품 에너지 절약, 다양한 에너지 절약 방법, 환경 장비의 특정 처리 프로세스가 다릅니다

2. 기존 방식

(1) 클래스 다이어그램

Java 디자인 패턴 전략 패턴 예시 분석 (2) 코딩 구현

1) EsPolicy 추상 클래스 정의 및 esPolicyHandler 메서드 정의

public abstract class EsPolicy {
    public void esPolicyHandler() {
    }
}
로그인 후 복사

2) BbEsPolicy는 EsPolicy를 상속하고 esPolicyHandler 메서드를 재정의합니다

rr 리

3) SpcEsPolicy는 EsPolicy를 상속하고 esPolicyHandler 메서드를 재정의합니다

public class BbEsPolicy extends EsPolicy {
    @Override
    public void esPolicyHandler() {
        System.out.println("===处理基带板节能策略===");
    }
}
로그인 후 복사

4) ProdEsPolicy는 EsPolicy를 상속하고 esPolicyHandler 메서드를 재정의합니다

public class SpcEsPolicy extends EsPolicy {
    @Override
    public void esPolicyHandler() {
        System.out.println("===Spc节能策略处理===");
    }
}
로그인 후 복사

5) Test

public class ProdEsPolicy extends EsPolicy {
    @Override
    public void esPolicyHandler() {
        System.out.println("===产品节能策略处理===");
    }
}
로그인 후 복사

실행 결과

=== 베이스밴드 보드 에너지 절약 전략 처리 = = =
===Spc 에너지 절약 전략 처리====

===제품 에너지 절약 전략 처리===

문제: 전통적인 방법은 상위 클래스를 하위 클래스를 통해 상속하고 상위 클래스를 덮어쓰는 것입니다. 서로 다른 하위 클래스 간의 차이를 달성하는 방법 동작, 클래스의 로컬 변경, 특히 슈퍼 클래스의 로컬 변경은 다른 부분에 영향을 미치고 파급 효과를 갖습니다

3. 전략 패턴 채택

(1) 클래스 다이어그램

Java 디자인 패턴 전략 패턴 예시 분석 ( 2) 코딩 구현

1) 정책 인터페이스 정의 및 추상 메소드 정의

public class EsPolicyTest {
    public static void main(String[] args) {
        EsPolicy bbEsPolicy = new BbEsPolicy();
        bbEsPolicy.esPolicyHandler();
        SpcEsPolicy spcEsPolicy = new SpcEsPolicy();
        spcEsPolicy.esPolicyHandler();
        ProdEsPolicy prodPolicy = new ProdEsPolicy();
        prodPolicy.esPolicyHandler();
    }
}
로그인 후 복사

2) BbEsPolicyHandler는 정책 인터페이스 구현 및 esPolicyHandler 메소드 구현

public interface EsPolicyHandler {
    void esPolicyHandler();
}
로그인 후 복사

3) SpcEsPolicyHandler는 정책 인터페이스 구현 및 esPolicyHandler 메소드

public class BbEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===基带板节能策略处理===");
    }
}
로그인 후 복사

구현 4) ProdEsPolicyHandler는 정책 인터페이스를 구현하고 esPolicyHandler 메서드를 구현합니다.

public class SpcEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===Spc节能策略处理===");
    }
}
로그인 후 복사

5) EsPolicy 추상 클래스를 정의하고 EsPolicyHandler를 해당 속성으로 삽입합니다.

public class ProdEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===产品节能策略处理===");
    }
}
로그인 후 복사

6) BbEsPolicy는 EsPolicy를 상속하고 생성자에서 esPolicyHandler 인터페이스 속성을 인스턴스화합니다.

public abstract class EsPolicy {
    EsPolicyHandler esPolicyHandler;
    public void setEsPolicyHandler(EsPolicyHandler esPolicyHandler) {
        this.esPolicyHandler = esPolicyHandler;
    }
    public void esPolicyHandler() {
        if (null != esPolicyHandler) {
            esPolicyHandler.esPolicyHandler();
        }
    }
}
로그인 후 복사

7) s정책 EsPolicy를 상속하고 생성자 esPolicyHandler 인터페이스 속성에서 인스턴스화합니다

public class BbEsPolicy extends EsPolicy {
    public BbEsPolicy() {
        esPolicyHandler = new BbEsPolicyHandler();
    }
}
로그인 후 복사

8) ProdEsPolicy는 EsPolicy를 상속하고 생성자 메서드에서 esPolicyHandler 인터페이스 속성을 인스턴스화합니다

public class SpcEsPolicy extends EsPolicy {
    public SpcEsPolicy() {
        esPolicyHandler = new SpcEsPolicyHandler();
    }
}
로그인 후 복사

9) Test

public class ProdEsPolicy extends EsPolicy {
    public ProdEsPolicy() {
        esPolicyHandler = new ProdEsPolicyHandler();
    }
}
로그인 후 복사

10) 실행 결과

===베이스밴드 처리 보드 에너지 절약 전략===
= ==SPC 에너지 절약 전략 처리===

===제품 에너지 절약 전략 처리===

4. 전략 모델의 주의사항 및 세부 사항

1) 핵심 전략 모델은: 프로젝트의 변화하는 부분과 변경되지 않은 부분을 분석합니다.

2) 전략 패턴의 핵심 아이디어는: 더 많은 조합/집계를 사용하고 더 적은 상속을 사용하는 것입니다.

3) "수정 가능, 확장 가능" 원칙을 구현합니다. 클라이언트는 원본 코드를 수정하지 않고 동작만 추가하면 되며 다중 전송을 사용하지 않습니다. 문(if...else if...else)

4) 교체 가능한 상속 제공 관계형 접근 방식: 전략 패턴은 알고리즘을 독립적인 Strategy 클래스에 캡슐화하므로 Context와 독립적으로 변경할 수 있으므로 쉽게 전환할 수 있습니다. , 이해하기 쉽고 확장하기 쉽습니다

5) 주의할 점: 전략을 추가할 때마다 전략이 너무 많으면 클래스를 추가하면 클래스 수가 엄청나게 늘어납니다

위 내용은 Java 디자인 패턴 전략 패턴 예시 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿