큰소리 디자인 학습 모드 02공장 모드 에서 전략 모드 로 승급

16053 단어 디자인 모드
  1 /**

  2  *        

  3  * @author Monica

  4  *

  5  */

  6 public abstract class CashSuper {

  7     /**

  8      *            

  9      * @param money     ,     

 10      * @return      

 11      */

 12     public abstract double acceptCash(double money);

 13 }

 14 

 15 /**

 16  *       

 17  * @author Monica

 18  *

 19  */

 20 public class CashNormal extends CashSuper{

 21 

 22     /**

 23      *     ,    

 24      */

 25     @Override

 26     public double acceptCash(double money) {

 27         return money;

 28     }

 29 

 30 }

 31 

 32 /**

 33  *       

 34  * @author Monica

 35  *

 36  */

 37 public class CashRebate extends CashSuper{

 38     private double moneyRebate = 1d;

 39     

 40     public CashRebate(String moneyRebate) {

 41         /*

 42          *     ,    ,       ,   ,  0.8

 43          */

 44         this.moneyRebate = Double.parseDouble(moneyRebate);

 45     }

 46 

 47     @Override

 48     public double acceptCash(double money) {        

 49         return money * moneyRebate;

 50     }

 51 

 52 }

 53 

 54 /**

 55  *       

 56  * @author Monica

 57  *

 58  */

 59 public class CashReturn extends CashSuper {

 60     //    

 61     private double moneyCondition = 0.0d;

 62     //   

 63     private double moneyReturn = 0.0d;

 64 

 65     public CashReturn(String moneyCondition, String moneyReturn) {

 66         this.moneyCondition = Double.parseDouble(moneyCondition);

 67         this.moneyReturn = Double.parseDouble(moneyReturn);

 68     }

 69     

 70     @Override

 71     public double acceptCash(double money) {

 72         double result = money;

 73         if (money >= moneyCondition) {

 74             //

 75             result = money - Math.floor(money / moneyCondition) * moneyReturn; 

 76         }

 77         return result;

 78     }

 79 }

 80 

 81 /**

 82  *        

 83  * @author Monica

 84  *

 85  */

 86 public class CashFactory {

 87     public static CashSuper createCashAccept(String type) {

 88         CashSuper cs = null;

 89         switch (type) {

 90         case "    ":

 91             cs = new CashNormal();

 92             break;

 93         case " 300  100":

 94             cs = new CashReturn("300", "100");

 95             break;

 96         case " 8 ":

 97             cs = new CashRebate("0.8");

 98             break;

 99         }

100         return cs;

101     }

102 }

불리 점: 매번 유지 보수 와 확장 비용 방식 은 이 공장 을 바 꿔 야 한다.진급: 전략 모드
 
/**

 *          

 * @author Monica

 *

 */

public class CashContext {

    CashSuper cs = null;

    

    public CashContext(String type) {

        switch (type) {

        case "    ":

            cs = new CashNormal();

            break;

        case " 300  100":

            cs = new CashReturn("300", "100");

            break;

        case " 8 ":

            cs = new CashRebate("0.8");

            break;

        }

    }

    

    public double GetResult(double money) {

        return cs.acceptCash(money);

    }

}



//   

    public static void main(String[] args) {

        CashContext csuper = new CashContext(" 8 ");

        double totalPrices = 0d;

        totalPrices = csuper.GetResult(Double.parseDouble("800"));

    }

 
전략 모델 은 일련의 알고리즘 을 정의 하 는 방법 이다. 개념 적 으로 볼 때 모든 알고리즘 이 똑 같은 작업 을 완성 했다. 다만 서로 다른 방식 으로 모든 알고리즘 을 호출 하여 각종 알고리즘 류 와 사용 알고리즘 류 간 의 결합 을 줄 일 수 있다.
장점:
전략 모델 의 Strategy 클래스 는 Context 로 재 활용 가능 한 일련의 알고리즘 이나 행 위 를 정의 합 니 다.계승 은 이러한 알고리즘 중의 공공 기능 을 분석 하 는 데 도움 이 된다.
유닛 테스트 를 간소화 하 였 습 니 다. 모든 알고리즘 은 자신의 클래스 가 있 기 때문에 자신의 인 터 페 이 스 를 통 해 단독으로 테스트 할 수 있 습 니 다.
서로 다른 행위 가 한 종류 에 쌓 여 있 을 때 조건 문 구 를 사용 하여 적당 한 행 위 를 선택 하 는 것 을 피하 기 어렵다.이러한 행 위 를 하나의 독립 된 Strategy 류 에 밀봉 하면 이러한 행 위 를 사용 하 는 류 에서 조건 문 구 를 없 앨 수 있다.
전략 모델 은 패 키 징 알고리즘 에 사용 되 지만 실천 에서 우 리 는 이 를 통 해 거의 작업 유형의 규칙 을 패 키 징 할 수 있 습 니 다. 분석 과정 에서 서로 다른 시간 에 서로 다른 업무 규칙 을 응용 해 야 한 다 는 것 을 들 으 면 전략 모델 로 이러한 변 화 를 처리 할 수 있 는 가능성 을 고려 할 수 있 습 니 다.
기본 적 인 전략 모델 에서 구체 적 으로 실 현 된 직책 을 선택 하면 클 라 이언 트 대상 이 맡 고 전략 모델 의 Context 대상 에 게 전달 합 니 다.
 
임무 수요 의 변경 은 모두 원가 가 필요 하 다.
(변경 은 switch 를 변경 해 야 합 니 다. 이 방법 은 사용 할 수 있 습 니 다. 반사 기술 )

좋은 웹페이지 즐겨찾기