1.在策略模式中,一个行为或其算法能够在运行时更改,这种类型的设计模式属于策略模式。 2.在策略模式中,咱们建立表示各类策略的对象和一个行为随着策略对象改变而改变的choose对象,策略对象改变choose对象的执行算法。 3.测试代码 github.com/644968328/D…git
1.能够动态的改变对象的行为。 2.避免使用多重条件判断。 3.扩展性好。github
1.多有的策略类都要对外暴露。 2.策略越多,类就越多。算法
1.若是一个系统里面有许多类,他们之间的区别在于他们的行为,那么使用策略模式能够动态的让一个对象在许多行为中选择一种行为。 2.一个系统须要动态的在几种算法中选择一种。 3.若是一个对象有不少行为须要使用多重条件选择语句来实现。设计模式
git想要出去旅游,因而用策略模式制定了一个出行方案。bash
建立一个策略接口,里面有一个出行方式的方法。ide
/**
* 每一个策略都是一个可执行的算法,
* 可根据业务定制不一样的算法类实现该接口
*/
public interface Strategy {
public String travelWay();
}
复制代码
建立策略的具体实现类,把每种出行方式都封装到类中。函数
/**
* 飞机出行
*/
public class PlaneStrategy implements Strategy {
@Override
public String travelWay() {
return "乘坐飞机出行";
}
}
复制代码
/**
* 火车出行
*/
public class TrainStrategy implements Strategy {
@Override
public String travelWay() {
return "乘坐火车出行";
}
}
复制代码
/**
* 汽车出行
*/
public class CarStrategy implements Strategy {
@Override
public String travelWay() {
return "乘坐汽车出行";
}
}
复制代码
建立策略运行环境,至关于策略选择器类,持有一个策略接口的引用。测试
/**
* 此类至关于策略动态选择器
*/
public class Choose {
private Strategy strategy;
//构造函数放入要使用的策略
public Choose(Strategy strategy) {
this.strategy = strategy;
}
public String travelWay() {
return strategy.travelWay();
}
}
复制代码
建立demo运行ui
public class StrategyPatternDemo {
public static void main(String[] args) {
System.out.println("有一天git想要出去旅游,因而他制定了一个路线");
Choose
planStrategy = new Choose(new PlaneStrategy()),
trainStrategy = new Choose(new TrainStrategy()),
carStrategy = new Choose(new CarStrategy());
System.out.println("他打算先" + planStrategy.travelWay() + "先到上海游玩");
System.out.println("而后在"+trainStrategy.travelWay()+"到杭州");
System.out.println("最后在"+carStrategy.travelWay()+"到宾馆");
}
}
复制代码