策略模式

在我们生活中 一直会存在选择 在每一次你做出选择的时候 也就代表你使用了一种Strategy

就像你出门出去玩一样 到达目的地 假如是上海到杭州

你可以选择坐飞机,坐火车,开车等等方式到达目的地 当然你也可以选择走路到达

这样选择的不同行为就相当于是一种策略

一般我们会把共同的属性和行为放在超类上面,但是这个时候就会产生一个问题,

当子类行为大部分一致是,但有少部分不一致。例如定义一个Person

在这里插入图片描述
这个时候我们有男人和女人两个子类去继承Person ,但是男人和女人这个时候有分歧了

男的晚睡十分钟,女的想早睡十分钟 ,这就出现了两种行为。

我们就可以把sleep这个行为提取出来实现一个行为接口

在这里插入图片描述
然后增加这个行为的策略例如
在这里插入图片描述
早睡十分钟
在这里插入图片描述
和晚睡十分钟

然后我们开始修改Person超类
在这里插入图片描述
把这种行为接口放到Person超类中 提供一个可以动态设置策略的方法接口

我们之后的子类就可以动态的实现睡觉的这个行为了

当然 到了这个时候我们可能有人会问 我直接在子类中重写超类中的sleep方法不是也一样的吗

这是因为我们举例的子类也就是只有两个 当子类多了 假如有100个 不同的person子类

AfterSleep 50个 FirstSleep 50个 我们这个时候不要早睡10分钟 都要早睡100分钟 有了策略模式的话

我们只需要去进行修改我们的具体策略就可以了 不用去改变子类和超类中的方法

策略模式的三种角色

  • 策略(Strategy):策略是一个接口,该接口定义算法标识。
  • 具体策略(ConcreteStrategy):具体策略是实现策略接口的类。具体策略实现策略接口所定义的抽象方法,即给出算法标识的具体算法。
  • 上下文(Context):上下文是依赖于策略接口的类,即上下文包含有策略声明的变量。上下文中提供了一个方法,该方法委托策略变量调用具体策略所实现的策略接口中的方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值