이 기사의 예는 귀하의 참조에 대한 Java 전략 모델을 공유합니다. 특정 내용은 다음과 같습니다
1. 전략 패턴은 정책 패턴이라고도하는 비교적 간단한 모델입니다.
정의는 다음과 같습니다.
알고리즘 패밀리를 정의하고 각각을 캡슐화하고 교환 가능하게 만듭니다.
(알고리즘 세트를 정의하고 각 알고리즘을 캡슐화하고 교환 가능하게 만듭니다.)
정책 패턴의 일반 클래스 다이어그램은 다음과 같습니다.
정책 모델의 세 가지 역할 :
● 컨텍스트 역할이라고도하는 컨텍스트 캡슐화 역할은 과거와 미래를 연결하는 캡슐화의 역할을 수행하고 정책 및 알고리즘에 대한 높은 수준의 모듈의 직접 액세스를 차단하고 가능한 변경 사항을 캡슐화합니다.
● 전략 초록 전략 역할 역할 전략 및 알고리즘 가족 추상화, 일반적으로 인터페이스는 각 전략 또는 알고리즘이 가져야하는 방법과 속성을 정의합니다.
● 구체적인 전략 특정 전략 역할은 추상 정책에서 운영을 구현 하며이 클래스에는 특정 알고리즘이 포함되어 있습니다.
정책 패턴은 캡슐화 된 역할의 생성자에서 특정 정책을 통과 한 다음이 정책을 실행하는 것입니다.
정책 모드의 일반적인 소스 코드는 다음과 같습니다.
public class test3 {public static void main (String [] args) {// 특정 전략 전략 전략을 선언합니다. // 컨텍스트 객체 컨텍스트 컨텍스트를 선언합니다 컨텍스트 = 새로운 컨텍스트 (전략); // 캡슐화 된 메소드 context.doanythinig ()를 실행합니다. }} 인터페이스 전략 {// 정책 모드의 산술 규칙 public void dosomething (); } class concretestrategy1 전략 {public void dosomething () {System.out.println ( "특정 전략 1에 대한 산술 규칙"); }} class concretestrategy2 전략 {public void dosomething () {System.out.println ( "특정 전략 2에 대한 산술 규칙"); }} 클래스 컨텍스트 {// 초록 전략 개인 전략 전략; // 생성자는 특정 전략을 설정하여 공개 컨텍스트 (전략 _strategy) {this.strategy = _strategy; } // 캡슐화 된 전략 방법 public void doanythinig () {this.strategy.dosomething (); }}전략 모델의 장점 :
● 알고리즘을 자유롭게 전환 할 수 있습니다
이것은 정책 모델 자체에 의해 정의됩니다. 추상 전략이 구현되는 한, 그것은 정책 패밀리의 구성원이되어 캡슐화 역할을 통해이를 캡슐화하여 "자유롭게 전환 가능"전략이 외부 세계에 제공되도록합니다.
● 여러 조건을 사용하여 판단하지 마십시오
정책 모델이 없다면 그것이 어떻게 생겼는지 생각해 봅시다. 전략 패밀리에는 5 가지 전략 알고리즘이 있습니다. 언젠가 전략 A를 사용한 다음 언젠가 전략 A를 사용해야합니다.
전략 B를 설계하는 방법 B? 여러 조건부 진술을 사용 하시겠습니까? 다중 조건 진술은 유지하기가 쉽지 않으며 오류의 확률이 크게 향상됩니다. 정책 모드를 사용한 후 다른 모듈은 채택 할 전략을 결정할 수 있습니다. 정책 패밀리가 외부로 제공 한 액세스 인터페이스는 캡슐화 클래스이며, 이는 운영을 단순화하고 조건부 진술 판단을 피합니다.
● 좋은 확장 성
너무 분명하기 때문에 이것이 무엇을 해야하는지 말할 필요조차 없습니다. 기존 시스템에 전략을 추가하는 것은 너무 쉽습니다. 인터페이스를 구현하면 다른 것을 수정할 필요가 없습니다. 반복적으로 분해 될 수있는 플러그인과 유사하며, 이는 OCP 원칙을 크게 준수합니다.
정책 패턴의 단점 :
● 정책 클래스의 수가 증가합니다. 각 전략은 수업이며 재사용 가능성은 매우 작으며 수업 수가 증가합니다.
● 모든 전략 클래스는 노출되어야합니다
정책 모드에 시나리오 사용 :
● 여러 클래스는 알고리즘이나 동작에서 약간 다른 시나리오 만 있습니다.
● 알고리즘을 자유롭게 전환 해야하는 시나리오.
● 알고리즘 규칙을 차단 해야하는 시나리오.
2. 정책 모드 확장 - 정책 열거
정책 열거는 다음과 같이 정의됩니다.
● 열거입니다.
● 집중된 전략 패턴의 열거입니다.
예는 다음과 같습니다.
질문 : 3 개의 매개 변수를 입력하고 추가 및 뺄셈 작업을 수행하십시오. 두 매개 변수는 int 유형이고 나머지 매개 변수는 문자열 유형입니다. "+"및 "-"만 선택할 수 있습니다. 복잡한 검증을 고려하지 마십시오. 우리가하는 일은 흰색 상자 테스트이며, 입력하는 것은 표준 int 유형 및 호환 문자열 유형입니다.
import java.util.arrays; public class test3 {public static void main (string [] args) {// 입력 된 두 매개 변수는 int a = integer.parseint (args [0])입니다. 문자열 기호 = args [1]; // int b = integer.parseint (args [2]); System.out.println ( "입력 매개 변수는"+arrays.tostring (args)); System.out.println ( "실행 결과는"+a+symbol+b+"="+calculator.add.exec (a, b)); }} enum calculator {// 작업 추가 ( "+") {public int exec (int a, int b) {return a+b; }}, // subtraction operation sub ( " -") {public int exec (int a, int b) {return a -b; }}; 문자열 값 = ""; // 멤버 값 정의 개인 계산기 (String _Value) {this.value = _value; } // 열거 멤버의 값을 가져옵니다 멤버 공용 문자열 getValue () {return this.value; } // 추상 기능 선언 공개 초록 int exec (int a, int b); }위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.