이 글은 주로 자바 디자인 패턴 학습에서 전략 패턴 관련 정보를 자세하게 소개하고 있으며, 관심 있는 친구들이 참고할 수 있습니다.
전략 패턴은 일련의 알고리즘 방법을 정의하는 방법입니다. 알고리즘이 수행하는 작업은 동일하지만 구현은 다릅니다. 모든 알고리즘을 동일한 방식으로 호출하여 다양한 알고리즘 클래스와 사용하는 알고리즘 클래스 간의 결합을 줄일 수 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!