Java 设计模式-策略模式

本文介绍了策略模式的概念,通过旅行出行的例子展示了如何使用策略模式实现不同行为的切换。策略模式允许在运行时选择不同的算法,避免了多重条件判断,提高了代码的扩展性和可维护性。Java中的TreeSet集合通过比较器实现不同排序策略即运用了这一模式。
摘要由CSDN通过智能技术生成

定义一组算法,将每个算法都封装起来,并且使他们之间可以相互互换。策略模式会使这些算法在客户端调用他们的时候能够互不影响他们的额变化。(Java中的TreeSet集合,构造方法传入具体的比较器以实现不同的排序算法,就是利用的这种策略模式I’m )。

优缺点

        优点:

  1. 算法可以自由切换。
  2. 避免使用多重条件判断。
  3. 扩展性非常好。

        缺点: 

  1. 策略类会增多。
  2. 所有的策略类都必须向外暴露。

场景假设

    模拟小明约了一群智商不等的人商量去一起旅行,但是有些人聪明,选择做飞机过去,有些人傻蛋,选择骑单车过去。不同的人选择出行的方式不同,所以我们可以吧他们怎么出行定义为抽象策略角色,他们旅行也定义为一种策略,因为出行方式不同。

实现

首先,肯定是定义一个出行工具tool,他们出行的方式有airplane()、bicycle(),但是会根据他们的选择而发生变化,所以我们要抽出来。

创建一个接口。 

public interface Tool {
    public String travel();
}

创建实现接口的实体类。(飞机、步行)


public class ToolAirplane implements Tool {
    @Override
    public String travel() {
        return "我比较聪明, 我选择做飞机过去";
    }
}

public class ToolWalk implements Tool {
    @Override
    public String walk() {
        return "我是傻帽,我要步行旅游";
    }
}

创建 Context 类。

public class Context {
   private Tool tool;
 
   public Context(Tool tool){
      this.tool = tool;
   }
 
   public int executeTool(){
      return tool.travel();
   }
}

使用 Context 来查看当它改变策略 Tool 时的行为变化。

public class ToolPatternDemo {
    public static void main(String[] args) {
        Context c = new Context(new ToolAirplane());
        System.out.println(c.executeTool());

        Context c1 = new Context(new ToolWalk());
        System.out.println(c1.executeTool());
    }
}

执行程序,输出结果:

我比较聪明, 我选择做飞机过去

我是傻帽,我要步行旅游

其实就是将不同的算法抽象,通过上下文切换策略实现不同行为。我们还可以使用策略模式代替很多的if else 判断执行不同的算逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值