策略模式

策略模式
定义:
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,
此模式让算法的变化独立于使用算法的客户。

实例:
其实有很多模式可以在我们人身上得到原型。
那么,策略模式在哪里找呢?我们脸上。

 

人是一个超级复杂的对象。今天我先把我们脸的部分功能给实例化了。
因为他是我们最常用的,她有丰富的表情,而且她的嘴帮我们很多很多
的忙,不过也有很多是倒忙。

 

首先把我们的脸抽象化:

主体:脸
说一句话“谢谢你的关照!”
做一个表情“微笑”
行为合体说话:楼主微笑的说:“谢谢你的关照!”

直接设计编码:

很简单吧。
但是,突然楼主捡到1快钱,开心得哈哈大笑起来,然后说:送给你!
又该怎么办呢?
改代码,的确可以做到,但是楼主又变脸了,那又怎么办呢?

 

可想而知,这个设计有问题。
它对修改没有关闭。违反开-闭原则---对扩展开发,对修改关闭

下面再说几个OO原则:
一.封装变化
二.使用组合,少用继承
三.针对接口编程,不针对实现编程

那么我们用上面的三个原则来设计这个程序:


封装变化
变化的有什么呢?
1.楼主说的话。常常变的
2.楼主表情。喜怒无常
不变的有什么呢?
1.说话这个行为
2.对大家的感激之心:)

 

针对接口编程,不针对实现编程
既然有2个地方是常常变的,那抽象出2个接口吧!

 

使用组合,少用继承(“有一个”可能比“是一个”更好)
那就让脸有一个“说的话”,还有一个“表情”。

 

类图

这--就是策略模式了!
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,
此模式让算法的变化独立于使用算法的客户。

本例子中的算法族(ThansWork GetWord GiveWord)(LittleSmile Cry YockSmile)
在封装后,用户就可以随意使用了。

 

public static void main(String [] arg){
  Face face = new Face();
  face.setWord(new GetWord());
  face.setExpress(new Cry());
  face.speak();
}

以上就是测试代码,

输出的不是--楼主微笑的说:谢谢你的关照!
而是--楼主哭着说:还我钱吧!

 

第一次写模式,如有意见,请及时反馈谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值