- 1.Strategy:策略接口,用来约束一系列具体的策略算法。Context使用这个接口来调用具体的策略,实现定义的策略。
//策略定义算法的接口
public interface Strategy {
int calculate(int num1,int num2);
}
//具体算法,加法
public class OperationAdd implements Strategy {
@Override
public int calculate(int num1, int num2) {
return num1 + num2;
}
}
//具体算法,减法
public class OperationSubstract implements Strategy {
@Override
public int calculate(int num1, int num2) {
return num1 - num2;
}
}
//具体算法,乘法
public class OperationMultiply implements Strategy {
@Override
public int calculate(int num1, int num2) {
return num1 * num2;
}
}
//具体算法,除法
public class OperationDivide implements Strategy {
@Override
public int calculate (int num1, int num2){
int res = 0;
try {
res = num1 / num2;
}catch (Exception e) {
e.printStackTrace();
}
return res;
}
}
//上下文
public class Context {
//持有一个具体策略对象
private Strategy strategy;
//传入一个具体策略对象
public Context(Strategy strategy) {
this.strategy =strategy;
}
public int calculate(int num1,int num2){
//调用具体策略对象进行算法运算
return strategy.calculate(num1,num2);
}
}
public static void main(String[] args) {
//计算 1 + 1
Context context = new Context(new OperationAdd());
System.out.println("1 + 1 = " + context.calculate(1,1));
//计算 1 - 1
context = new Context(new OperationSubstract());
System.out.println("1 - 1 = " +context.calculate(1,1));
}
package com.qbz.test;
//策略接口,计算购车总金额
interface Strategy {
int calPrice(int price, int num);
}
// 购买5辆及以下不打折
class Nodiscount implements Strategy {
@Override
public int calPrice(int price, int num) {
return price * num;
}
}
// 购买6-10辆打9.5折
class Disount1 implements Strategy {
@Override
public int calPrice(int price, int num) {
return (int) (price * num * 0.95);
}
}
// 购买11-20辆打9折算法实现
class Disount2 implements Strategy {
@Override
public int calPrice(int price, int num) {
return (int) (price * num * 0.9);
}
}
// 购买20辆以上打8.5折算法实现
class Disount3 implements Strategy {
@Override
public int calPrice(int price, int num) {
return (int) (price * num * 0.85);
}
}
// 上下文,根据不同策略来计算购车总金额
class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public int calPrice(int price, int num) {
// 计算价格算法
return strategy.calPrice(price, num);
}
}
public class Main {
// 每辆车单价10000
public static void main(String[] args) {
Strategy strategy;
// 计算购买3辆总金额
strategy = new Nodiscount();
Context context = new Context(strategy);
System.out.println("购买3辆总金额: " + context.calPrice(10000, 3));
// 计算12辆总金额
strategy = new Disount2();
context = new Context(strategy);
System.out.println("购买12辆总金额:" + context.calPrice(1000, 12));
}
}
购买3辆总金额: 30000
购买12辆总金额:10800