重新认识策略模式--简单分析
2016-05-30 15:40
225 查看
一、说明
定义了一系列的算法,并把每个算法封装起来,使他们可以相互替换。这种模式使算法可独立于使用它的客户而变化。它的中心不是如何实现算法,而是如何组织、调用这些算法,让程序结构更灵活,具有更好的维护性和扩展性。
二、类图:
![](https://img-blog.csdn.net/20160530153632172)
三、代码实现:
/**
* 策略,定义算法接口*/
public interface Strategy{
//某个算法接口,可以传入参数,可以有返回值
public void algorithmInterface();
}
public class ConcreteStrategyA implements Strategy{
public void algorithmInterface(){
//具体实现
}
}
public class ConcreteStrategyB implements Strategy{
public void algorithmInterface(){
//具体实现
}
}
public class ConcreteStrategyCS implements Strategy{
public void algorithmInterface(){
//具体实现
}
}
/**
* 上下文,持有一个具体的策略对象*/
public class Context{
//具体的策略对象
private Strategy strategy;
//构造函数,传入具体的策略对象
public Context(Strategy strategy){
this.strategy=strategy;
}
public void contextInterface(){
strategy.algorithmInterface();
}
}
四、策略模式逻辑
1.客户端选择并创建具体的策略对象。
2.客户端创建上下文
3.客户端使用上下文的方法来执行功能,在调用的时候,从客户端传入算法需要的参数。
4.上下文接到客户的调用请求,会把这个请求转发给它持有的Strategy.
五、扩展
1.通过以上逻辑,可以看出,上下文是具体策略的实现对象。策略实现对象也可以从上下文获取所需要的数据,这样上下文和策略的实现对象之间的耦合度就会很高。在这种情况下需要注意的是上下文数据的浪费,因为所有的策略对象实现都用同一个策略接口,传入相同的上下文。
2.
策略实现扩展的方式有两种,即:扩展上下文,扩展封装实际的算法。
定义了一系列的算法,并把每个算法封装起来,使他们可以相互替换。这种模式使算法可独立于使用它的客户而变化。它的中心不是如何实现算法,而是如何组织、调用这些算法,让程序结构更灵活,具有更好的维护性和扩展性。
二、类图:
三、代码实现:
/**
* 策略,定义算法接口*/
public interface Strategy{
//某个算法接口,可以传入参数,可以有返回值
public void algorithmInterface();
}
public class ConcreteStrategyA implements Strategy{
public void algorithmInterface(){
//具体实现
}
}
public class ConcreteStrategyB implements Strategy{
public void algorithmInterface(){
//具体实现
}
}
public class ConcreteStrategyCS implements Strategy{
public void algorithmInterface(){
//具体实现
}
}
/**
* 上下文,持有一个具体的策略对象*/
public class Context{
//具体的策略对象
private Strategy strategy;
//构造函数,传入具体的策略对象
public Context(Strategy strategy){
this.strategy=strategy;
}
public void contextInterface(){
strategy.algorithmInterface();
}
}
四、策略模式逻辑
1.客户端选择并创建具体的策略对象。
2.客户端创建上下文
3.客户端使用上下文的方法来执行功能,在调用的时候,从客户端传入算法需要的参数。
4.上下文接到客户的调用请求,会把这个请求转发给它持有的Strategy.
五、扩展
1.通过以上逻辑,可以看出,上下文是具体策略的实现对象。策略实现对象也可以从上下文获取所需要的数据,这样上下文和策略的实现对象之间的耦合度就会很高。在这种情况下需要注意的是上下文数据的浪费,因为所有的策略对象实现都用同一个策略接口,传入相同的上下文。
2.
策略实现扩展的方式有两种,即:扩展上下文,扩展封装实际的算法。
相关文章推荐
- mysql 5.7.12编译参数
- MYSQL 大批量数据插入
- Android自定义吐司(Toast)
- ARC下OC对象和CF对象之间的桥接(bridge)
- Oracle存储过程简单实例:
- cdn简介使用
- 浅谈linux--make和makefile
- Android-- 详解App AllowBackup配置带来的风险
- OpenWrt小杂项
- [leetcode] 【链表】92. Reverse Linked List II
- 随机迷宫算
- OC & java 对比
- Java4Android第1课:第一个应用程序Hello world
- Fragment与FragmentActivity,FragmentActivity与Activity的区别与联系
- 去谷歌
- Android自定义View简介
- 统计Textarea中字数的方法
- 在Linux下创建CVS用户
- Nginx服务器中的重定向配置参考指南
- 【JavaWeb开发】Eclipse Java注释模版设置方法