디자인 모델 노트 - 간단 한 공장 모델 과 전략 모델
23258 단어 디자인 모드
대상 을 만 들 때 들 어 오 는 매개 변수의 값 을 통 해 실례 화 할 대상 을 결정 합 니 다.
단점: 기능 을 증가 할 때 공장 류 코드 를 수정 해 야 하 며 개방 - 폐쇄 원칙 에 부합 되 지 않 습 니 다.
예시: 가감 연산 실현
//
public class Operation {
private double numberA = 0;
private double numberB = 0;
private double result = 0;
public double getNumberA() {
return numberA;
}
public void setNumberA(double numberA) {
this.numberA = numberA;
}
public double getNumberB() {
return numberB;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
public double getResult() {
return result;
}
}
//
public class OperationAdd extends Operation {
public double getResult() {
return getNumberA() + getNumberB();
}
}
//
public class OperationSub extends Operation {
public double getResult() {
return getNumberA() - getNumberB();
}
}
//
public class OperationFactory {
public static Operation createOperate(String operate) {
Operation oper = null;
switch (operate) {
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
default:
break;
}
return oper;
}
}
전략 모드
서로 다른 알고리즘 (변화 점) 을 밀봉 하여 서로 바 꿀 수 있 도록 합 니 다. 이런 모델 은 알고리즘 의 변 화 를 알고리즘 을 사용 하 는 고객 에 게 영향 을 주지 않 습 니 다.
정책 클래스 를 매개 변수 로 Context 클래스 에 전송 하고 실행 할 때 대응 하 는 알고리즘 을 호출 합 니 다.
예: 백화점 요금 (정상 요금, 할인 요금, 만 감 요금)
//
public abstract class CashSupper {
public abstract double acceptCash(double money);
}
//
public class CashNormal extends CashSupper {
@Override
public double acceptCash(double money) {
// TODO Auto-generated method stub
return money;
}
}
//
public class CashRebate extends CashSupper {
private double moneyRebate = 1d;
public CashRebate(String moneyRebate) {
this.moneyRebate = Double.parseDouble(moneyRebate);
}
@Override
public double acceptCash(double money) {
// TODO Auto-generated method stub
return money * moneyRebate;
}
}
//
public class CashReturn extends CashSupper {
private double moneyCondition = 0.0d;//
private double moneyReturn = 0.0d;//
public CashReturn(String moneyCondition, String moneyReturn) {
this.moneyCondition = Double.parseDouble(moneyCondition);
this.moneyReturn = Double.parseDouble(moneyReturn);
}
@Override
public double acceptCash(double money) {
// TODO Auto-generated method stub
if(money >= moneyCondition) {
return money - Math.floor(money / moneyCondition) * moneyReturn;
}else {
return money;
}
}
}
public class CashContext{
private CashSupper cashSupper;
public CashContext(CashSupper cs){
this.cashSupper = cs;
}
public double getResult(double money){
return cashSupper.acceptCash(money);
}
}
클 라 이언 트 코드:
CashContext cashContext = null;
switch(type){
case " ":
cashContext = new CashContext(new CashNormal());
break;
case " ":
cashContext = new CashContext(new CashRebate("0.8"));
break;
case " 300 100":
cashContext = new CashContext(new CashReturn("300","100"));
break;
}
//
cashContext.getResult(money);
클 라 이언 트 가 어떤 알고리즘 을 사용 하 는 지 판단 하지 않도록 공장 모델 을 결합 시 킬 수 있다.
// CashContext
public class CashContext {
private CashSupper cashSupper;
public CashContext(String type) {
switch (type) {
case " ":
cashSupper = new CashNormal();
break;
case " ":
cashSupper = new CashRebate("0.8");
break;
case " 300 100":
cashSupper = new CashReturn("300", "100");
default:
break;
}
}
public double getResult(double money) {
return cashSupper.acceptCash(money);
}
}
CashContext 클래스 를 수정 하고 변 경 된 클 라 이언 트 코드 만 필요 합 니 다.
public static void main(String[] args) {
// TODO Auto-generated method stub
String type = " 300 100";
double money = 900d;
CashContext cashContext = new CashContext(type);
System.out.println(cashContext.getResult(money));
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.