디자인 모드 - 전략 모드 상세 설명
전략 모델 을 말 하기 전에 우 리 는 소매 업계 소프트웨어 의 고객 유형 에 대한 할인 기능 을 살 펴 보 았 다.
vip 고객 은 20% 할인 하고 svip 고객 은 30% 할인 합 니 다.
코드 구현:
if (customer == "vip")
{
amount = amount * 0.8;
}
else if (customer == "svip")
{
amount = amount * 0.7;
}
코드 를 보 는 것 은 매우 간단 합 니 다. 그러나 오늘 VIP 를 20% 할인 하고 내일 70% 할인 해 야 한다 면 원래 의 코드 를 바 꿔 야 합 니 다. 그러면 개폐 원칙 에 어 긋 납 니 다.여기 서 변 화 된 것 은 할인 의 계산 방식 (전략) 이 고 전략 모델 은 이런 문 제 를 해결 할 수 있다.
개념
전략 모델 은 대상 행동 형 모델 이다.전략 모드 (Strategy Pattern): 일련의 알고리즘 을 정의 하고 모든 알고리즘 을 패키지 하여 서로 바 꿀 수 있 도록 합 니 다.
실현
전략 모델 은 세 가지 역할 을 포함한다. 상황: 문맥 류, 전략: 추상 적 인 전략 류, Concrete Strategy: 구체 적 인 전략 류
추상 정책 클래스:
public abstract class AbstractDiscountStrategy
{
public abstract decimal Discount(decimal amount);
}
구체 적 인 전략 클래스:
public class VipDiscountStrategy:AbstractDiscountStrategy
{
public override decimal Discount(decimal amount)
{
return amount * 0.8M;
}
}
public class SVipDiscountStrategy:AbstractDiscountStrategy
{
public override decimal Discount(decimal amount)
{
return amount * 0.7M;
}
}
환경 클래스:
public class StrategyContext
{
private AbstractDiscountStrategy discountStrategy;
public StrategyContext(AbstractDiscountStrategy concreteDiscountStrategy)
{
this.discountStrategy = concreteDiscountStrategy;
}
public decimal ExecuteStrategy(decimal amount)
{
return this.discountStrategy.Discount(amount);
}
}
호출:
if (customer == "vip")
{
context = new StrategyContext(new VipDiscountStrategy());
amount = context.ExecuteStrategy(amount);
}
else if (customer == "svip")
{
context = new StrategyContext(new SVipDiscountStrategy());
amount = context.ExecuteStrategy(amount);
}
이 를 통 해 알 수 있 듯 이 정책 모델 을 응용 한 후에 VIP 고객 의 할인 계산 방식 을 수정 하려 면 해당 하 는 전략 만 수정 하면 됩 니 다. 클 라 이언 트 의 호출 코드 를 수정 하지 않 아 도 svip 의 할인 계산 방식 에 영향 을 주지 않 고 개폐 원칙 에 부합 합 니 다.
ssvip 클 라 이언 트 를 하나 더 추가 하려 면 대응 하 는 전략 실현 클래스 를 추가 하고 클 라 이언 트 의 호출 방법 을 수정 하면 됩 니 다.
vip 와 svip 의 전략 은 교환 할 수 있 습 니 다.
총화
위의 예 를 통 해 알 수 있 듯 이 전략 모델 의 장점 은 '개폐 원칙' 에 대한 완벽 한 지원 을 제공 하 는 것 이다. 사용 자 는 기 존의 시스템 을 수정 하지 않 은 토대 에서 알고리즘 이나 행 위 를 선택 할 수도 있 고 새로운 알고리즘 이나 행 위 를 유연 하 게 추가 할 수도 있다.
단점 도 뚜렷 하 다. 클 라 이언 트 는 모든 전략의 용 도 를 잘 알 고 어떤 전략 을 사용 할 지 스스로 결정 하여 클 라 이언 트 의 부담 을 증가 시 켜 야 한다. 이 문 제 는 설정 방식 으로 해결 할 수 있다.모든 전략 은 하나의 유형 이 필요 하고 전략 류 를 증가 시 킬 것 이다.
코드 다운로드:https://github.com/hzhhhbb/StrategyPattern
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.