java 设计模式之策略模式

策略模式

策略模式定义

对同一种行为不同的实现算法,比如:从北京到哈尔滨,可以选择乘火车、飞机、客车、自驾

策略模式使用场景

针对同一种行为,可以有多种不同的实现算法。
比如:打折方案(不同的人群不同的打折算法)、个人所得税(根据不同的收入种类,不同的个税计算算法)

策略模式源码
交通工具策略接口
package strategy;

/**
 * @author :  freedom
 * @Description :  交通工具策略接口
 * @Creation Date:  2019-11-28 7:45 上午
 */
public interface Itransportation {

  /**
   * 交通方式
   */
  void transport();
}

火车策略实现类
package strategy;

/**
 * @author :  freedom
 * @Description :  火车策略
 * @Creation Date:  2019-11-28 7:48 上午
 */
public class Train implements Itransportation {

  /**
   * 交通方式
   */
  @Override
  public void transport() {
    System.out.printf("乘坐火车从北京到哈尔滨");
  }
}

汽车策略实现类
package strategy;

/**
 * @author :  freedom
 * @Description :  公共汽车策略
 * @Creation Date:  2019-11-28 7:46 上午
 */
public class Car implements Itransportation {

  /**
   * 交通方式
   */
  @Override
  public void transport() {
    System.out.printf("乘坐公共汽车从北京到哈尔滨");
  }
}

策略对象持有类
package strategy;

/**
 * @author :  freedom
 * @Description :  策略对象
 * @Creation Date:  2019-11-28 7:54 上午
 */
public class Strategy {

  /**
   * 声明不同算法的引用
   */
  private Itransportation itransportation;

  /**
   * 初始化不同的算法
   */
  Strategy(Itransportation itransportation) {
    this.itransportation = itransportation;
  }

  /**
   * 调用不同的策略
   */
  public void getTransportation() {
    this.itransportation.transport();
  }

}

策略模式测试类
package strategy;

/**
 * @author :  freedom
 * @Description :  策略测试类
 * @Creation Date:  2019-11-28 7:56 上午
 */
public class StrategyTest {

  public static void main(String[] args) {
    //new 一个环境策略对象
    Strategy strategy = new Strategy(new Car());
    strategy.getTransportation();
    Strategy trainStrategy = new Strategy(new Train());
    trainStrategy.getTransportation();
  }
}

策略模式测试运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4GPwAqSh-1574899704028)(evernotecid://AAA42DFC-EC45-4768-B516-25846DA75603/appyinxiangcom/12441645/ENResource/p1892)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bigdatafreedom

你的鼓励奖是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值