>  기사  >  백엔드 개발  >  PHP 디자인 패턴 배우기 PHP 구현 전략 패턴(전략)_php 기술

PHP 디자인 패턴 배우기 PHP 구현 전략 패턴(전략)_php 기술

WBOY
WBOY원래의
2016-05-16 20:03:39884검색

의도
일련의 알고리즘을 정의하고 하나씩 캡슐화하여 상호 교환 가능하게 만듭니다. 전략 패턴을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘이 달라질 수 있습니다.
전략모드에서 달라지는 것은 알고리즘입니다
2. 전략 패턴 구조도

3. 전략 모드의 주인공
추상 전략(Strategy) 역할: 지원되는 모든 알고리즘에 대한 공개 인터페이스를 정의합니다. 일반적으로 인터페이스 또는 추상화로 구현됩니다. 컨텍스트는 이 인터페이스를 사용하여 ConcreteStrategy
에 의해 정의된 알고리즘을 호출합니다. ConcreteStrategy 역할: Strategy 인터페이스를 사용하여 특정 알고리즘을 구현합니다.
환경(컨텍스트) 역할: Strategy 클래스에 대한 참조를 보유하고 ConcreteStrategy 객체를 사용하여
구성 4. 전략 모드의 장점과 단점
전략 모드의 장점:
1. 전략 모드는 관련 알고리즘 계열을 관리하는 방법을 제공합니다
2. 전략 패턴은 계산을 독립적인 전략 클래스에 포함하여 상속 관계를 대체하는 방법을 제공하므로 해당 컨텍스트와 독립적으로 변경할 수 있습니다
3. 전략 모드를 사용하면 여러 조건부 전송 문을 사용하지 않아도 됩니다.
전략 모드의 단점:
1. 고객은 모든 전략을 이해해야 합니다. 이는 전략 모델의 잠재적인 단점입니다.
2. 전략과 컨텍스트 간의 커뮤니케이션 오버헤드
3. 전략 모드에서는 다양한 전략 카테고리가 생성됩니다
5. 전략 모드 적용 시나리오
1. 많은 관련 클래스가 다르게 동작합니다. "전략"은 여러 동작 중 하나로 클래스를 구성하는 방법을 제공합니다
2. 알고리즘의 다양한 변형을 사용해야 합니다.
3. 알고리즘은 고객이 알면 안되는 데이터를 사용합니다. 복잡한 알고리즘 관련 데이터 구조 노출을 방지하기 위해 전략 패턴을 사용할 수 있습니다
4. 클래스는 여러 동작을 정의하며 이러한 동작은 이 클래스의 작업에서 여러 형태로 나타납니다. 관련 조건부 분기를 해당 전략 클래스로 이동하여 이러한 조건문을 대체합니다
6. 전략 모드 및 기타 모드
템플릿 패턴: 템플릿 메소드 패턴과 전략 패턴의 차이점은 전략 패턴은 위임된 메소드를 사용하여 다양한 알고리즘 동작을 제공하는 반면, 템플릿 메소드는 상속된 메소드를 사용하여 다양한 알고리즘 동작을 제공한다는 점입니다
플라이웨이트 모드(플라이웨이트 모드): 여러 클라이언트 개체가 동일한 전략 클래스를 호출해야 하는 경우 플라이웨이트 모드를 구현할 수 있습니다
7. 전략 모드 PHP 예제

<&#63;php
/**
 * 抽象策略角色,以接口实现
 */
interface Strategy {
 
  /**
   * 算法接口
   */
  public function algorithmInterface();
}
 
/**
 * 具体策略角色A
 */
class ConcreteStrategyA implements Strategy {
 
  public function algorithmInterface() {
    echo 'algorithmInterface A<br />';
  }
}
 
/**
 * 具体策略角色B
 */
class ConcreteStrategyB implements Strategy {
 
  public function algorithmInterface() {
    echo 'algorithmInterface B<br />';
  }
}
 
/**
 * 具体策略角色C
 */
class ConcreteStrategyC implements Strategy {
 
  public function algorithmInterface() {
    echo 'algorithmInterface C<br />';
  }
}
 
/**
 * 环境角色
 */
class Context {
  /* 引用的策略 */
  private $_strategy;
 
  public function __construct(Strategy $strategy) {
    $this->_strategy = $strategy;
  }
 
  public function contextInterface() {
    $this->_strategy->algorithmInterface();
  }
 
}
 
/**
 * 客户端
 */
class Client {
 
  /**
   * Main program.
   */
  public static function main() {
    $strategyA = new ConcreteStrategyA();
    $context = new Context($strategyA);
    $context->contextInterface();
 
    $strategyB = new ConcreteStrategyB();
    $context = new Context($strategyB);
    $context->contextInterface();
 
    $strategyC = new ConcreteStrategyC();
    $context = new Context($strategyC);
    $context->contextInterface();
  }
 
}
 
Client::main();
&#63;>

위는 전략 패턴을 구현하기 위해 PHP를 사용하는 코드입니다. 전략 패턴에 대한 몇 가지 개념적 차이점도 있습니다. 모든 사람의 학습에 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.