策略模式
定义:
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,
此模式让算法的变化独立于使用算法的客户。
实例:
其实有很多模式可以在我们人身上得到原型。
那么,策略模式在哪里找呢?我们脸上。
人是一个超级复杂的对象。今天我先把我们脸的部分功能给实例化了。
因为他是我们最常用的,她有丰富的表情,而且她的嘴帮我们很多很多
的忙,不过也有很多是倒忙。
首先把我们的脸抽象化:
主体:脸
说一句话“谢谢你的关照!”
做一个表情“微笑”
行为合体说话:楼主微笑的说:“谢谢你的关照!”
直接设计编码:
很简单吧。
但是,突然楼主捡到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();
}
以上就是测试代码,
输出的不是--楼主微笑的说:谢谢你的关照!
而是--楼主哭着说:还我钱吧!
第一次写模式,如有意见,请及时反馈谢谢。