设计模式之策略模式
2016-06-20 16:01
155 查看
描述:使用策略模式,在改变需求和扩展需求的时候,不需要改动以前的代码,只需要新增功能即可
使用场景:用不同的方式去达到相同的效果,这些方式就是策略
缺点:如果方式过多的话,会导致策略类过于冗余
//出行方式的共同接口
public interface TravelStrategy {
//出行方式
void travel();
}
//飞机出行方式
public class AirplaneStrategy implements TravelStrategy{
@Override
public void travel() {
System.out.println("搭乘飞机出行");
}
}
//火车出行方式
public class TrainStrategy implements TravelStrategy {
@Override
public void travel() {
System.out.println("坐火车出行");
}
}
//自行车出行方式
public class BicycleStrategy implements TravelStrategy {
@Override
public void travel() {
System.out.println("骑自行车出行");
}
}
//扩展轮船出行方式
public class ShipStrategy implements TravelStrategy {
@Override
public void travel() {
System.out.println("坐轮船出行");
}
}
//使用出行方式的人
public class Person {
private TravelStrategy travelStrategy;
public Person(TravelStrategy travelStrategy){
this.travelStrategy = travelStrategy;
}
public void travel(){
this.travelStrategy.travel();
}
}
//主方法
public class Main {
public static void main(String[] args){
TravelStrategy t1 = new AirplaneStrategy();
TravelStrategy t2 = new BicycleStrategy();
TravelStrategy t3 = new TrainStrategy();
TravelStrategy t4 = new ShipStrategy();
Person p = new Person(t4);
p.travel();
}
}
使用场景:用不同的方式去达到相同的效果,这些方式就是策略
缺点:如果方式过多的话,会导致策略类过于冗余
//出行方式的共同接口
public interface TravelStrategy {
//出行方式
void travel();
}
//飞机出行方式
public class AirplaneStrategy implements TravelStrategy{
@Override
public void travel() {
System.out.println("搭乘飞机出行");
}
}
//火车出行方式
public class TrainStrategy implements TravelStrategy {
@Override
public void travel() {
System.out.println("坐火车出行");
}
}
//自行车出行方式
public class BicycleStrategy implements TravelStrategy {
@Override
public void travel() {
System.out.println("骑自行车出行");
}
}
//扩展轮船出行方式
public class ShipStrategy implements TravelStrategy {
@Override
public void travel() {
System.out.println("坐轮船出行");
}
}
//使用出行方式的人
public class Person {
private TravelStrategy travelStrategy;
public Person(TravelStrategy travelStrategy){
this.travelStrategy = travelStrategy;
}
public void travel(){
this.travelStrategy.travel();
}
}
//主方法
public class Main {
public static void main(String[] args){
TravelStrategy t1 = new AirplaneStrategy();
TravelStrategy t2 = new BicycleStrategy();
TravelStrategy t3 = new TrainStrategy();
TravelStrategy t4 = new ShipStrategy();
Person p = new Person(t4);
p.travel();
}
}
相关文章推荐
- 每天一个Linux命令(53)service命令
- Chrome 的 开发者工具(F12、devtools)开启缓慢解决方法
- WPF中的binding(七)- 使用LINQ检索作为Binding的数据源
- 一个适合小公司用的开源数据管道工具
- Grunt Gruntfile.js uglify concat watch 基本配置
- 提高项目2-求解分段函数的值
- Win7系统阿里旺旺自动登录该怎么取消?Win7系统取消阿里旺旺自动登录方法图文教程
- Android_动态权限管理的解决方案
- Spring aop读写分离
- python学习
- Thinkphp 表单验证
- jquery与document转换
- Android Fragment 真正的完全解析(上)
- JAVA 对象大小
- Oracle数据字典
- iOS 编译包含 bitcode 的 x264 静态库
- 程序员进修途径
- 【转】 UIALertView的基本用法与UIAlertViewDelegate对对话框的事件处理方法
- Log4NET简介
- retrofit2+rxjava+mockserver使用和理解