设计模式|第四篇:策略设计模式

1.概念

定义一系列算法的方法,所有这些算法完成的都是相同的工作但实现不同

2.实现步骤

  • 定义抽象策略类,同时定义算法
  • 定义具体抽象类,用于实现定义的算法
  • 定义context类,用于算法统一调用
  • 定义工厂类,利用反射根据传入对象不同从而完成不同方法调用

3.案例

  • 定义抽象策略类
 public interface AlgorithmStrategy {
 
     void algorithm();
 }
  • 定义具体抽象类,同时实现定义的算法
// A策略
public class AStrategy implements AlgorithmStrategy{

  @Override
  public void algorithm() {
    System.out.println("A算法计算公式");
  }
}
// B策略
public class BStrategy implements AlgorithmStrategy {

  @Override
  public void algorithm() {
    System.out.println("B算法计算公式");
  }
}
  • 定义策略上下文,实现算法同一处理
public class StrategyContext {

  private AlgorithmStrategy strategy;

  public StrategyContext(AlgorithmStrategy strategy) {
    this.strategy = strategy;
  }

public void calculat() {
    this.strategy.algorithm();
}
}
  • 定义策略工厂类,动态获得具体策略
public class StrategyFactory {

  public static AlgorithmStrategy getStrategy(String className) throws Exception {
    Class<?> aClass = Class.forName(className);
    AlgorithmStrategy algorithmStrategy = (AlgorithmStrategy) aClass.newInstance();
    return algorithmStrategy;
  }
}
  • 测试使用
 public class MainTest {
 
   public static void main(String[] args) throws Exception {
     //不使用策略工厂
     StrategyContent ca = new StrategyContent(new AStrategy());
     ca.calculat();
 
     StrategyContent cb = new StrategyContent(new BStrategy());
     cb.calculat();
 
     //使用工厂模式加反射实现
     AlgorithmStrategy strategyA = StrategyFactory
         .getStrategy("com.xiaofengczy.design.structural.strategy.demo01.AStrategy");
     strategyA.algorithm();
 
     AlgorithmStrategy strategyB = StrategyFactory
         .getStrategy("com.xiaofengczy.design.structural.strategy.demo01.BStrategy");
     strategyB.algorithm();
 
   }
 }
  • 案例结构图
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值