`
stanxl
  • 浏览: 3967 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

策略模式浅谈

阅读更多

其实策略模式,从字面意思上理解,类似于我想达到某一种效果时,不用去煞费苦心的再去想方法,而是已经做好的方法只要去调用就可以了

那么体现到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());
                //p1 处理器,只是简单的输出文件的绝对路径;
            }
        };
        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++;
                //p2处理器,将遍历到的文件名字改成相关数字
            }
        };
        //如果想用p2,只需要将下面的第一个参数改成p2,就可以了
        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>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    设计模式浅谈1——策略模式

    NULL 博文链接:https://qiemengdao.iteye.com/blog/752462

    浅谈烟草企业财务管理模式现状及创新策略

    浅谈烟草企业财务管理模式现状及创新策略

    浅谈以人为本模式下的小学学校科学管理策略.docx

    浅谈以人为本模式下的小学学校科学管理策略.docx

    浅谈简单工作流设计——责任链模式配合策略与命令模式的实现

    本文以项目中的一个工作流模块,演示责任链模式、策略模式、命令模式的组合实现!最近在做的一个项目,涉及到的是一个流程性质的需求。关于工程机械行业的服务流程:服务任务流程和备件发运流程。项目之初,需求不是...

    浅谈信息技术环境下建构少数民族美术教育的模式与策略研究.pdf

    浅谈信息技术环境下建构少数民族美术教育的模式与策略研究.pdf

    2021年浅谈图书馆联盟的多层治理模式与可持续发展策略.docx

    2021年浅谈图书馆联盟的多层治理模式与可持续发展策略.docx

    简谈SAP消耗策略的设置.pdf

    介绍SAP消耗策略中的计划独立需求、客户需求的概念,两者之间的关系,消耗策略的原理...通过例子和图解,分析不同消耗模式的处理结果和过程。SAP消耗策略是指,实际客户需求与系统已设定的计划独立需求的一种冲销方式。

    浅谈python量化 双均线策略(金叉死叉)

    # True为开启动态复权模式,使用真实价格交易 set_option('use_real_price', True) # 股票类交易手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱

    实时数据库系统的设计浅谈.docx

    实时数据库系统的设计浅谈全文共3页,当前为第1页。实时数据库系统的设计浅谈全文共3页,当前为第1页。实时数据库系统的设计浅谈 实时数据库系统的设计浅谈全文共3页,当前为第1页。 实时数据库系统的设计浅谈全文共...

    移动互联网时代新零售企业审计模式的创新——基于瑞幸咖啡财务舞弊的案例分析.pdf

    移动互联网时代新零售企业审计模式的创新——基于瑞幸咖啡财务舞弊的案例分析.pdf

    浅谈数据库设计.doc

    浅谈数据库设计 在当今的信息时代,信息已逐渐成为决定生产力、竞争力和经济效益的重要资源,管 理者只有及时、准确地掌握相关信息,才能做出正确的决策。数据库技术是指对于一个 给定的应用环境,构造最优的数据库...

    IOI国家集训队论文集1999-2019

    骆 骥 -《由"汽车问题"浅谈深度搜索的一个方面——搜索对象与策略的重要性》 毛子青 -《动态规划算法的优化技巧》 俞 玮 -《基本动态规划问题的扩展》 张一飞 -《求N!的高精度算法》 ## 2002 戴德承 -《退...

    浅谈数据分析.pdf

    浅谈数据分析 2015/7/8 内容 数据分析定义 数据分析的要求 数据分析步骤及介绍 2 为什么需要数据分析? 3 什么是数据分析? 4 定义: 数据分析是指用适当的统计方法对收集来的大量数据进行分 析,将它们加以汇总和...

    浅谈数据库系统优化.docx

    浅谈数据库系统优化 概要:数据库系统的优化可以有效提高系统的性能,微软的SQL Server数据库的优化是一个系统工程,需要从设计开始就进入优化程序。 数据库的性能的优化成了数据处理的一个很重要环节。系统的性能...

    Java设计模式 版本2

    对象间的联动——观察者模式,处理对象的多种状态及其相互转换——状态模式,算法的封装与切换——策略模式,模板方法模式深度解析,操作复杂对象结构——访问者模式,设计模式与足球,多人联机射击游戏中的设计模式...

    浅谈网站架构中缓存的应用

    缓存常见的模式和实现 缓存的更新过期和清除策略 包裹着缓存纱布的数据库 缓存存储方式的选择 缓存的同步问题 缓存的颠簸问题 分布式缓存系统的需求 Memcache的基本介绍 Memcache的使用误区和实践 Windows Server ...

    浅谈计算机系统的安全防范调研报告.doc

    浅谈计算机系统的安全防范调研报告 浅谈计算机系统的安全防范 随着计算机及网络技术与应用的不断发展,伴随而来的计算机系统安全问题越来越引起 人们的关注。计算机系统一旦遭受破坏,将给使用单位造成重大经济损失...

    浅谈煤炭企业对标管理工作

    对标管理作为一个较为新颖的管理模式,在应用中需要注意的问题主要有:注意为对标的对象企业保护指标秘密;谨防标杆企业的虚假信息迷惑;不能过度的看重对比的结果;经营者应主动参与对标管理工作。针对这些问题,本文提出...

    浅谈煤矿建设工程的造价控制与管理

    为构建造价管理的综合管控模式,确保造价管理与煤矿建设工程实现良好的融合,切实提升煤矿企业的社会与经济效益,在煤矿建设工程中,相关部门紧密配合,确保煤矿建设的各个环节都做到工程造价控制,将决策阶段、设计阶段...

Global site tag (gtag.js) - Google Analytics