Latest web development tutorials

전략 모드

전략 모드 (전략 패턴), 클래스 행위, 또는 알고리즘 런타임에 변경 될 수 있습니다. 디자인 패턴이 유형의 행동 패턴에 속한다.

전략 모드에서는 오브젝트와 텍스트 오브젝트의 표현을 변경하는 정책 객체로서 행동 변화의 다양한 전략을 생성한다. 정책 개체 알고리즘의 실행 컨텍스트 객체를 변경합니다.

소개

의도 : 알고리즘 가족의정의는, 그것들을 하나 하나 캡슐화하고 교체합니다.

주로 해결하기 위해 : 여러 유사한 알고리즘의 경우 다른 복잡하고 유지하기가 어렵 가져 ... 경우에 사용.

시스템이 많은 여러 카테고리를 가지고, 오직 즉각적인 행동을 구별하기 위하여다음의 경우 사용한다.

어떻게 해결하는 방법은 : 패키지 클래스에이 알고리즘은 임의적으로 대체됩니다.

키 코드는 : 동일한 인터페이스를 구현합니다.

적용 예 : 1, 좋은 아이디어 제갈량은 각 키트는 전략이다.2 차로, 자전거를 타고 선택, 여행 여행 방법은 여행하는 각각의 방법은 전략이다. 3, JAVA는 LayoutManager에를 AWT.

장점 : 1 알고리즘을 자유롭게 전환 할 수있다.2 다중 조건의 사용을 피해야한다. 3, 좋은 확장 성을 제공합니다.

단점 : 1 전략은 증가 할 것이다.2, 모든 클래스는 외교 정책 노출의 필요합니다.

사용 시나리오 : 1, 많은 종류가 동작 만 그들 사이의 차이를, 동적으로 객체의 많은 동작의 행동을 허용하도록 선택할 수 전략 패턴을 사용하는 시스템은 존재하는 경우.도 2를 참조하면, 시스템은 동적으로 여러 알고리즘 중 하나를 선택해야한다. 즉 적절한 모드가 아닌 경우 객체가 행동을 많이 가지고 3. 경우, 이러한 행위는 여러 조건을 달성하기 위해 문을 선택 사용했다.

주 : 개 이상의 시스템의 정책, 사용자가 확장 정책 클래스의 문제를 해결하기 위해, 혼합 모드의 사용을 고려할 필요가있는 경우.

실현

우리는 기업전략전략전략 인터페이스에잘 정의 된 인터페이스 및 구현 활동을 만듭니다.콘텍스트는특정 수준의 정책을 사용한다.

이 구성 또는 정책 변경을 변경하는 데 사용되는 경우StrategyPatternDemo는컨텍스트 컨텍스트 및 정책 개체를 사용하여 우리의 데모 클래스는 동작을 보여합니다.

전략 패턴 UML 다이어그램

1 단계

인터페이스를 만듭니다.

Strategy.java

공용 인터페이스 전략 {
   공공 INT doOperation (INT NUM1, INT NUM2);
}

2 단계

인터페이스를 구현 엔티티 클래스를 만듭니다.

OperationAdd.java

공용 클래스 OperationAdd는 전략을 {구현
   @Override
   공공 INT의 doOperation (INT NUM1, INT NUM2) {
      NUM1 + NUM2를 반환;
   }
}

OperationSubstract.java

공용 클래스 OperationSubstract는 전략을 {구현
   @Override
   공공 INT의 doOperation (INT NUM1, INT NUM2) {
      NUM1을 반환 - NUM2을;
   }
}

OperationMultiply.java

공용 클래스 OperationMultiply는 전략을 {구현
   @Override
   공공 INT의 doOperation (INT NUM1, INT NUM2) {
      NUM1의 *의 NUM2를 반환;
   }
}

3 단계

상황에 맞는클래스를 만듭니다.

Context.java

공용 클래스 컨텍스트 {
   개인 전략 전략;

   공공 컨텍스트 (전략 전략) {
      this.strategy = 전략;
   }

   공공 INT executeStrategy (INT NUM1, INT NUM2) {
      strategy.doOperation (NUM1, NUM2)을 반환;
   }
}

4 단계

그것은 행동 변화 전략전략을변경할 때 볼컨텍스트를 사용합니다.

StrategyPatternDemo.java

공용 클래스 StrategyPatternDemo {
   공공 정적 무효 메인 (문자열 []에 args) {
      컨텍스트 컨텍스트 = 새로운 컨텍스트 (새 OperationAdd ());		
      System.out.println에 ( "10 + 5 ="+ context.executeStrategy (10, 5));

      컨텍스트 = 새로운 컨텍스트 (새 OperationSubstract ());		
      에서 System.out.println ( "10-5 ="+ context.executeStrategy (10, 5));

      컨텍스트 = 새로운 컨텍스트 (새 OperationMultiply ());		
      System.out.println에 ( "10 * 5 ="+ context.executeStrategy (10, 5));
   }
}

5 단계

출력을 확인합니다.

10 + 5 = 15
10--5 = 5
10 * 5 = 50