策略设计模式
根据不同的场景执行不同的处理逻辑,每个场景有自己的类写符合这个场景的逻辑,然后统一通过环境类调用。
多个场景类,多一种场景就多一个场景类。
使用方法:
1、创建抽象策略类并创建抽象策略接口,或创建策略接口类创建策略接口。
2、创建不同场景类,继承抽象策略类或实现策略接口类,重写抽象策略接口或策略接口,写该场景的逻辑代码。
3、创建环境类,引入抽象策略类或策略接口类,创建策略类的构造函数,get、set方法,简单调用策略类的接口。
4、实际场景时,创建环境类的对象,传入场景类对象,并调用环境类中简单封装策略类的接口。
以下代码复制于:https://www.cnblogs.com/porotin/p/7788675.html
1、创建策略接口类
public interface Weapon {
public void gun();
}
2、创建不同场景类实现策略接口类
//场景1:
public class FirstGun implements Weapon {
@Override
public void gun() {
System.out.println(“使用AWM狙击步枪。”);
}
}
//场景2:
public class SecondGun implements Weapon {
@Override
public void gun() {
System.out.println(“使用S12K。”);
}
}
3、创建环境类,引入策略类,生成get、set、构造函数方法,简单封装策略接口
public class Context {
Weapon weapon; //策略类
public Context(Weapon weapon) { //构造函数
super();
this.weapon = weapon;
}
public Weapon getWeapon() { //get方法
return weapon;
}
public void setWeapon(Weapon weapon) { //set方法
this.weapon = weapon;
}
public void gun() { // 简单调用策略类接口
weapon.gun();
}
}
4、实际场景,调用环境类
public class StrategyClient {
public static void main(String[] args) {
//使用构造函数默认选择一把AWM狙击步枪(一个策略)
Context context=new Context(new FirstGun());
context.gun();
//使用get、set方法切换到S12K(切换策略)
System.out.println("------右前方30米发现敌人------");
contex.set(new SecondGun());
context.gun();
}
}