系列文章目录
[0]设计模式-设计原则
[1]设计模式-策略模式
[2]设计模式-观察者模式(手动实现)
[3]设计模式-观察者模式(内置模型)
[4]设计模式-观察者模式(JFrame)
[5]设计模式-装饰者模式(初学缺陷版)
[6]设计模式-装饰者模式(进阶完善版)
文章目录
前言
策略模式的学习可以更优美的做出我们类行为的切换,使用的场景非常之多,通过下面的代码,就可以体会到了
提示:以下是本篇文章正文内容,下面案例可供参考
一、策略模式是什么?
策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,次模式让算法的变化独立于使用算法的客户。
二、核心代码
1.创建机器人
代码如下(示例):我们简单的创建一个机器人,从下面代码可以知道,耗电模式有很多种类当我们使用的时候可以选择其中一种,那么我们就知道在耗电模式的地方使用策略模式。
/**
* 机器人.<br>
*
* @author likang5 <br>
* @version 1.0.0 2022年5月16日<br>
* @see
* @since JDK 1.5.0
*/
public class Robot {
/**
* 名字.
*/
private String name;
/**
* 耗电模式.
*/
private IPowerConsumptionMode powerConsumptionMode;
public void boot() {
System.out.println("我是" + name);
powerConsumptionMode.myMethod();
}
/**
* 获取name.
*
* @return the name
*/
public String getName() {
return name;
}
/**
* 设置name.
*
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取powerConsumptionMode.
*
* @return the powerConsumptionMode
*/
public IPowerConsumptionMode getPowerConsumptionMode() {
return powerConsumptionMode;
}
/**
* 设置powerConsumptionMode.
*
* @param powerConsumptionMode
* the powerConsumptionMode to set
*/
public void setPowerConsumptionMode(IPowerConsumptionMode powerConsumptionMode) {
this.powerConsumptionMode = powerConsumptionMode;
}
2.创建耗电策略
代码如下(示例):
/**
* 耗电模式.<br>
* @author likang5 <br>
* @version 1.0.0 2022年5月16日<br>
* @see
* @since JDK 1.5.0
*/
@FunctionalInterface
public interface IPowerConsumptionMode {
void myMethod();
}
/**
* 高功模式.<br>
*
* @author likang5 <br>
* @version 1.0.0 2022年5月16日<br>
* @see
* @since JDK 1.5.0
*/
public class HightPowerConsumptionMode implements IPowerConsumptionMode {
/**
* {@inheritDoc}
*
* @see com.study.designMode.strategyMode.IPowerConsumptionMode#myMethod()
*/
@Override
public void myMethod() {
System.out.println("执行高功率模式。");
}
}
/**
* 底功模式.<br>
*
* @author likang5 <br>
* @version 1.0.0 2022年5月16日<br>
* @see
* @since JDK 1.5.0
*/
public class LowPowerConsumptionMode implements IPowerConsumptionMode {
/**
* {@inheritDoc}
*
* @see com.study.designMode.strategyMode.IPowerConsumptionMode#myMethod()
*/
@Override
public void myMethod() {
System.out.println("执行低功率模式。");
}
}
简单的实现两个耗电策略。可能注意到了接口上的注解,下面我会做出解释。
3.测试机器人
代码如下(示例):
/**
* 机器人测试.<br>
*
* @author likang5 <br>
* @version 1.0.0 2022年5月16日<br>
* @see
* @since JDK 1.5.0
*/
public class RobotTest {
// private static void powerConsum(IPowerConsumptionMode inter) {
// inter.myMethod();
// }
public static void main(String[] args) {
Robot r1 = new Robot();
r1.setName("机器人1号");
r1.setPowerConsumptionMode(new LowPowerConsumptionMode());
r1.boot();
Robot r2 = new Robot();
r2.setName("机器人2号");
r2.setPowerConsumptionMode(new HightPowerConsumptionMode());
r2.boot();
}
}
一个简单实用的策略模式就体现出来了。但是代码可以更加优美,看下新出的函数式接口,可以不进行实现两个策略类,代码如下。
/**
* 机器人测试.<br>
*
* @author likang5 <br>
* @version 1.0.0 2022年5月16日<br>
* @see
* @since JDK 1.5.0
*/
public class RobotTest {
private static void powerConsum(IPowerConsumptionMode inter) {
inter.myMethod();
}
public static void main(String[] args) {
// 方式一:
// Robot r1 = new Robot();
//
// r1.setName("机器人1号");
// r1.setPowerConsumptionMode(new LowPowerConsumptionMode());
// r1.boot();
//
// Robot r2 = new Robot();
//
// r2.setName("机器人2号");
// r2.setPowerConsumptionMode(new HightPowerConsumptionMode());
// r2.boot();
// 方式二:
Robot r1 = new Robot();
r1.setName("机器人1号");
r1.boot();
powerConsum(()->System.out.println("执行低功率模式。"));
Robot r2 = new Robot();
r2.setName("机器人2号");
r2.boot();
powerConsum(()->System.out.println("执行高功率模式。"));
}
}
多出了两个匿名实现,品到了没有。
总结
希望本文章对大家的代码编写有所提升,可以的化给作者一个小心心,万分感谢。