전략 패턴은 일련의 알고리즘을 정의하고 각 알고리즘을 캡슐화하여 서로 대체 할 수있는 행동 설계 패턴입니다. 이렇게하면 알고리즘 변경이 알고리즘을 사용하여 클라이언트에 영향을 미치지 않도록합니다.
소프트웨어 개발에서 개발자는 종종 문제를 해결하기 위해 다른 조건에 따라 다른 알고리즘을 선택해야합니다. 코드에 모든 알고리즘을 직접 작성하면 코드를 복잡하고 유지하기가 어려울 수 있습니다. 정책 패턴은 클라이언트 변경과 무관하게 알고리즘을 다양한 정책으로 캡슐화하여 코드의 유지 관리 가능성과 확장 성을 향상시킵니다.
전략 패턴은 일반적으로 세 가지 주요 역할로 구성됩니다.
전자 상거래 플랫폼을 개발 중이며 회원 수준을 기반으로 제품의 할인 가격을 계산해야한다고 가정 해 봅시다. 다른 멤버십 레벨은 다른 할인 알고리즘에 해당합니다.
먼저, 다른 멤버십 수준에 대한 할인 알고리즘을 나타내는 추상 전략 클래스를 정의해야합니다.
interface DiscountStrategy {
public function calculate($price);
}
다음으로 여러 특정 전략 클래스를 정의하여 다른 할인 알고리즘을 구현하십시오. 예를 들어, 일반 회원 및 VIP 회원의 할인 알고리즘 :
class RegularMemberDiscount implements DiscountStrategy {
public function calculate($price) {
// 일반 회원의 할인 계산
$discountedPrice = $price * 0.9;
echo "일반 회원의 할인 된 가격:" . $discountedPrice . "\n";
}
}
class VIPMemberDiscount implements DiscountStrategy {
public function calculate($price) {
// VIP회원 할인 계산
$discountedPrice = $price * 0.8;
echo "VIP회원 할인 가격:" . $discountedPrice . "\n";
}
}
그런 다음 현재 정책 개체에 따라 할인을 계산하기 위해 환경 클래스를 정의해야합니다.
class DiscountCalculator {
private $strategy;
public function __construct(DiscountStrategy $strategy) {
$this->strategy = $strategy;
}
public function calculateDiscount($price) {
$this->strategy->calculate($price);
}
}
전략 모델을 사용하면 다양한 멤버십 수준에 따라 할인 가격을 쉽게 계산할 수 있습니다.
$price = 100.0;
$regularMemberDiscount = new RegularMemberDiscount();
$vipMemberDiscount = new VIPMemberDiscount();
$calculator = new DiscountCalculator($regularMemberDiscount);
$calculator->calculateDiscount($price);
$calculator = new DiscountCalculator($vipMemberDiscount);
$calculator->calculateDiscount($price);
전략 모델은 일반적으로 사용되는 설계 모델이며, 특히 다른 상황에 따라 알고리즘을 유연하게 선택 해야하는 시나리오에 적합합니다. 정책 패턴을 통해 알고리즘은 독립 정책 클래스로 캡슐화되어 동적으로 대체 될 수 있도록 시스템의 유지 관리 가능성을 향상시킬뿐만 아니라 새로운 알고리즘의 도입을 더 쉽게 만듭니다.
이 기사의 예에서, 우리는 추상 정책 클래스 및 특정 정책 클래스의 설계를 통해 클라이언트의 알고리즘을 성공적으로 분리합니다. 이러한 방식으로 향후 새 멤버십 수준을 추가하거나 할인 알고리즘을 수정할 때 클라이언트 코드에 대한 영향을 피할 수 있으며 코드의 재사용 성과 확장 성이 향상 될 수 있습니다.