큰소리 디자인 학습 모드 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 를 변경 해 야 합 니 다. 이 방법 은 사용 할 수 있 습 니 다. 반사 기술 )
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.