其实策略模式,从字面意思上理解,类似于我想达到某一种效果时,不用去煞费苦心的再去想方法,而是已经做好的方法只要去调用就可以了
那么体现到java程序设计里,也可以这么理解,如果过程是随着参数的变化而变化的,这个时候就可以用策略模式
好像有点类似于开车,想要车跑的速度不一样,只需要轻轻的换下档位就O了,每个档位对应的速度范围都是设计好的
从下面的这个小小的遍历文件的例子来看效果:
现在我想遍历E盘下的abc文件夹下的所有文件,那么遍历文件的代码是不变的,遍历到文件以后,怎么处理是变化的,这也刚好响应了程序设计的基本原则,将变化的代码和不变的代码分离开
先看如下代码:
import java.io.*;
public class Test{
public static void walkDir(File file){
File[] files = file.listFiles();
for(File ff : files){
if(ff.isDirectory()){
walkDir(ff);
}
System.out.println(ff.getAbsolutePath());
}
}
public static void main(String[] args){
walkDir(new File("E:/abc"));
}
}
上面代码遍历到文件后,输出了文件的绝对路径
那么现在假如我不想输出文件的绝对路径,而是想做其它的处理,这里就得把代码换掉,比如说想把某个文件删除,或者是改名字,当然这里只是针对这个例子做些简单的改动,貌似看起来不是太麻烦,那么假如是这里要改动的是上百、上千行的代码呢,就会显得十分的不方便
人家说杀死一个程序猿,不需要干别的,改两次需求就可以了……………
所以这时候策略模式就可以派上用场了,看下面的代码:
在外面定义一个接口:
interface Process{
public void process(File file);
}
public class Test{
public static void walkDir(Process p,File file){
File[] files = file.listFiles();
for(File ff : files){
if(ff.isDirectory()){
walkDir(p,ff);
}
p.process(ff);
}
}
public static void main(String[] args){
Process p1 = new Process(){
public void process(File file){
System.out.println(ff.getAbsolutePath());
}
};
Process p2 = new Process(){
public void process(File file){
private count = 0;
String path = file.getAbsolutePath();
int index = path.lastIndexOf("\\");
String str = path.substring(0,index);
file.renameTo(new File(str+ "/" + count));
count++;
}
};
walkDir(p1,new File("E:/abc"));
}
}
那么这里要提一点,为什么要把Process设置为接口呢?
我们知道接口具有可以达到完全解耦的目的,降低了耦合性,那么现在我里面写好的是两种方法,假如客户端程序猿想去自己定义一个方法,这个时候,接口的作用就体现出来了,它只要去实现这个接口,重写里面的process()方法,根据他自己的需要再去写方法,而我只是把这个框架提供给他,他可以自由发挥
这是这个设计模式的简单应用举例,就先这样吧,后续再完善……………..
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
NULL 博文链接:https://qiemengdao.iteye.com/blog/752462
浅谈烟草企业财务管理模式现状及创新策略
浅谈以人为本模式下的小学学校科学管理策略.docx
本文以项目中的一个工作流模块,演示责任链模式、策略模式、命令模式的组合实现!最近在做的一个项目,涉及到的是一个流程性质的需求。关于工程机械行业的服务流程:服务任务流程和备件发运流程。项目之初,需求不是...
浅谈信息技术环境下建构少数民族美术教育的模式与策略研究.pdf
2021年浅谈图书馆联盟的多层治理模式与可持续发展策略.docx
介绍SAP消耗策略中的计划独立需求、客户需求的概念,两者之间的关系,消耗策略的原理...通过例子和图解,分析不同消耗模式的处理结果和过程。SAP消耗策略是指,实际客户需求与系统已设定的计划独立需求的一种冲销方式。
# True为开启动态复权模式,使用真实价格交易 set_option('use_real_price', True) # 股票类交易手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
实时数据库系统的设计浅谈全文共3页,当前为第1页。实时数据库系统的设计浅谈全文共3页,当前为第1页。实时数据库系统的设计浅谈 实时数据库系统的设计浅谈全文共3页,当前为第1页。 实时数据库系统的设计浅谈全文共...
移动互联网时代新零售企业审计模式的创新——基于瑞幸咖啡财务舞弊的案例分析.pdf
浅谈数据库设计 在当今的信息时代,信息已逐渐成为决定生产力、竞争力和经济效益的重要资源,管 理者只有及时、准确地掌握相关信息,才能做出正确的决策。数据库技术是指对于一个 给定的应用环境,构造最优的数据库...
骆 骥 -《由"汽车问题"浅谈深度搜索的一个方面——搜索对象与策略的重要性》 毛子青 -《动态规划算法的优化技巧》 俞 玮 -《基本动态规划问题的扩展》 张一飞 -《求N!的高精度算法》 ## 2002 戴德承 -《退...
浅谈数据分析 2015/7/8 内容 数据分析定义 数据分析的要求 数据分析步骤及介绍 2 为什么需要数据分析? 3 什么是数据分析? 4 定义: 数据分析是指用适当的统计方法对收集来的大量数据进行分 析,将它们加以汇总和...
浅谈数据库系统优化 概要:数据库系统的优化可以有效提高系统的性能,微软的SQL Server数据库的优化是一个系统工程,需要从设计开始就进入优化程序。 数据库的性能的优化成了数据处理的一个很重要环节。系统的性能...
对象间的联动——观察者模式,处理对象的多种状态及其相互转换——状态模式,算法的封装与切换——策略模式,模板方法模式深度解析,操作复杂对象结构——访问者模式,设计模式与足球,多人联机射击游戏中的设计模式...
缓存常见的模式和实现 缓存的更新过期和清除策略 包裹着缓存纱布的数据库 缓存存储方式的选择 缓存的同步问题 缓存的颠簸问题 分布式缓存系统的需求 Memcache的基本介绍 Memcache的使用误区和实践 Windows Server ...
浅谈计算机系统的安全防范调研报告 浅谈计算机系统的安全防范 随着计算机及网络技术与应用的不断发展,伴随而来的计算机系统安全问题越来越引起 人们的关注。计算机系统一旦遭受破坏,将给使用单位造成重大经济损失...
对标管理作为一个较为新颖的管理模式,在应用中需要注意的问题主要有:注意为对标的对象企业保护指标秘密;谨防标杆企业的虚假信息迷惑;不能过度的看重对比的结果;经营者应主动参与对标管理工作。针对这些问题,本文提出...
为构建造价管理的综合管控模式,确保造价管理与煤矿建设工程实现良好的融合,切实提升煤矿企业的社会与经济效益,在煤矿建设工程中,相关部门紧密配合,确保煤矿建设的各个环节都做到工程造价控制,将决策阶段、设计阶段...