>Java >java지도 시간 >Java의 전략 패턴 학습

Java의 전략 패턴 학습

黄舟
黄舟원래의
2017-10-13 10:16:461344검색

이 글은 주로 자바 디자인 패턴 학습에서 전략 패턴 관련 정보를 자세하게 소개하고 있으며, 관심 있는 친구들이 참고할 수 있습니다.

전략 패턴은 일련의 알고리즘 방법을 정의하는 방법입니다. 알고리즘이 수행하는 작업은 동일하지만 구현은 다릅니다. 모든 알고리즘을 동일한 방식으로 호출하여 다양한 알고리즘 클래스와 사용하는 알고리즘 클래스 간의 결합을 줄일 수 있습니다.

Java는 전략 모델을 구현합니다.

요구 사항: 쇼핑몰 캐셔 시스템, 캐셔 방식은 일반 충전, 20% 할인, 300개 이상 구매 시 100백 이 세 가지 충전 방법입니다.

1: 슈퍼 클래스를 만듭니다. 즉 추상적인 과금방식이다.


public abstract class CashSuper {
  public abstract double acceptCash(double money);
}

2: 이 슈퍼클래스를 구현하는 클래스를 만듭니다.


public class CashNormal extends CashSuper {
 
  @Override
  public double acceptCash(double money) {
    return money;
  }
 
}

3: 쇼핑몰의 다양한 과금 방식에 따라 세 가지 과금 방식에 대한 특정 구현 알고리즘 클래스 생성


/**打折子类
 * 获取打折折扣,使用应付金额乘以折扣
 * @author 我不是张英俊
 *
 */
public class CashRebate extends CashSuper {

  private double moneyRebate=1;
  
  public CashRebate(String moneyRebate){
    this.moneyRebate=Double.parseDouble(moneyRebate);
  }
  @Override
  public double acceptCash(double money) {
    
    
    return money*moneyRebate;
  }

}


/**返利收费子类,例如,满三百减一百
 * @author 我不是张英俊
 *
 */
public class CashReturn extends CashSuper {

  /**
   * 返利收费,初始化时必须要输入返利条件和返利值,比如慢300时返100,
   * 则moneyCondition为300,moneyRetrun 为100
   */
  private double moneyCondition=0;
  private double moneyReturn=0;
  
  public CashReturn(String moneyCondition,String moneyReturn){
    this.moneyCondition=Double.parseDouble(moneyCondition);
    this.moneyReturn=Double.parseDouble(moneyReturn);
  }
  
  
  @Override
  public double acceptCash(double money) {
    
    double result=money;
    if(money>=moneyCondition){
      result=money-Math.floor(money/moneyCondition)*moneyReturn;
    }
    
    return result;
  }

}


/**
 *正常收费的,原价返回
 * @author 我不是张英俊
 *
 */
public class CashNormal extends CashSuper {

  @Override
  public double acceptCash(double money) {
    return money;
  }

}

4: Context를 작성하여 동일한 프로세스를 수행 같은 방법 다른 결제 방법 구현. 다양한 객체를 생성해야 하기 때문에 간단한 팩토리 패턴과 연계하여 구현해야 합니다.


public class CashContext {

  private CashSuper cs=null;
  
  public CashContext(String type){
    switch (type) {
    case "正常收费":
      CashNormal cs0=new CashNormal();
      cs=cs0;
      break;
    case "满300返100":
      CashReturn cr1=new CashReturn("300", "100");
      cs=cr1;
      break;
    case "打八折":
      CashRebate cr2=new CashRebate("0.8");
      cs=cr2;
      break;
      
    }
  }
  
  public double GetResult(double money){
    return cs.acceptCash(money);
  }
  
}

5: 테스트 클래스


public class Test {

  public static void main(String[] args) {
    
    double a=new CashContext("打八折").GetResult(300);
    System.out.println(a);
    double b=new CashContext("正常收费").GetResult(300);
    System.out.println(b);
    double c=new CashContext("满300返100").GetResult(300);
    System.out.println(c);
  }

}

6: 콘솔.

240.0
300.0
200.0

요약: 전략 패턴은 각 알고리즘이 자체 클래스이고 자체 인터페이스를 통해 개별적으로 테스트할 수 있으므로 단위 테스트를 단순화합니다.

전략 패턴은 알고리즘을 캡슐화하는 데 사용되지만 실제 사용에서는 분석 프로세스 중 다양한 비즈니스 규칙을 서로 다른 시점에 적용해야 한다는 것을 듣는 한 모든 유형의 규칙을 캡슐화하는 데 사용할 수 있습니다. 이를 고려하여 이러한 변화의 가능성을 처리하려면 전략 패턴을 사용하세요.

내 생각: 일반적으로 전략 패턴은 알고리즘을 캡슐화합니다. 예를 들어 쿵푸 팬더는 동물 슈퍼 클래스를 상속받은 후 전략 패턴을 사용하여 각각을 결합해야 합니다. 알고리즘은 분리되어 있어 사용 시 잘 결합될 수 있습니다.

위 내용은 Java의 전략 패턴 학습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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