1) Strategy Pattern에서는 알고리즘 패밀리(전략 그룹)를 별도로 정의하고 캡슐화하여 서로 교체할 수 있도록 합니다. 이 모드는 알고리즘을 사용하는 고객과 독립적으로 알고리즘을 변경합니다. ) 이 알고리즘은 여러 가지 설계 원칙을 구현합니다. 첫째, 변경된 코드와 변경되지 않은 코드를 분리합니다. 둘째, 특정 클래스가 아닌 인터페이스용으로 프로그래밍됩니다(전략적 인터페이스가 정의됨). 셋째, 다목적 조합/집계, 상속을 덜 사용합니다. 전략을 조합하여 사용)
예: 환경 에너지 절약을 위해 세 가지 에너지 절약 방법이 제안됩니다: 베이스밴드 보드 에너지 절약, SPC 에너지 절약, 제품 에너지 절약, 다양한 에너지 절약 방법, 환경 장비의 특정 처리 프로세스가 다릅니다
2. 기존 방식
(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. 전략 패턴 채택
( 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. 전략 모델의 주의사항 및 세부 사항
2) 전략 패턴의 핵심 아이디어는: 더 많은 조합/집계를 사용하고 더 적은 상속을 사용하는 것입니다.
3) "수정 가능, 확장 가능" 원칙을 구현합니다. 클라이언트는 원본 코드를 수정하지 않고 동작만 추가하면 되며 다중 전송을 사용하지 않습니다. 문(if...else if...else)
4) 교체 가능한 상속 제공 관계형 접근 방식: 전략 패턴은 알고리즘을 독립적인 Strategy 클래스에 캡슐화하므로 Context와 독립적으로 변경할 수 있으므로 쉽게 전환할 수 있습니다. , 이해하기 쉽고 확장하기 쉽습니다
5) 주의할 점: 전략을 추가할 때마다 전략이 너무 많으면 클래스를 추가하면 클래스 수가 엄청나게 늘어납니다
위 내용은 Java 디자인 패턴 전략 패턴 예시 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!