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

适配器模式浅谈

 
阅读更多

继上篇策略模式,可以引出一个叫做适配器模式的设计模式
先看下面的代码,还是上篇策略模式的代码段

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"));
    }
}

在给walkDir()传的第一个参数(p1、p2…),都我们自己定义的类
那如果是这个类不是我们自己定义的,而是发现的,比如系统内置的java.util.Date类呢,它并没有实现Process接口,也不可能实现这个接口
因为系统内置的类我们改不了,我们手里只有系统生成好的可怜的class文件
肿么办??现在我非要传个Date类进去,这个时候,适配器就可以解决这个问题
看下面的代码:

class DateAdapter implements Process{
    private Date date;
    public DateAdapter(Date date){
        this.date = date;
    }
    public void process(File file){
        System.out.println(file.getName() + ":" +date.getDate());
    }
}

OK,现在做出了一个DateAdapter,把Date传进去,实现Process接口,所以现在处理过程中还可以用Date去处理,这就叫适配,这样一适配,任何类都可以去处理文件了
现在这样给walkDir()传参数:

walkDir(new DateAdapter(new Date()),new File("E:/abc"));

总结一下,如果一个类是你发现的,而发现的类自己又改不了,自定义的类才能改,这个时候去用发现的类去处理相关的过程,就用到了适配器模式
个人浅谈,有误地方,多多指教

<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>

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

分享到:
评论

相关推荐

    Java设计模式 版本2

    对象的克隆——原型模式,复杂对象的组装与创建——建造者模式,不兼容结构的协调——适配器模式,处理多维度变化——桥接模式,树形结构的处理——组合模式,扩展系统功能——装饰模式,深入浅出外观模式,实现对象...

    design-pattern-java.pdf

    七个结构型模式 七个结构型模式 适配器模式-Adapter Pattern 不兼容结构的协调——适配器模式(一) 不兼容结构的协调——适配器模式(二) 不兼容结构的协调——适配器模式(三) 不兼容结构的协调——适配器模式...

    浅谈关于能量管理系统

    考核监视管理系统硬件主要包括考核监视计算机、网络适配器和激光报表打印机等。其硬件配置如图1所示。考核监视计算机通过双网分别与EM S 和管理信息系统(M IS) 相连, 其中一个网出现故障时, 不影响系统的正常运行, ...

    asp.net知识库

    也谈 ASP.NET 1.1 中 QueryString 的安全获取写法 ASP.NET运行模式:PageHandlerFactory 利用搜索引擎引用来高亮页面关键字 网站首页的自动语言切换 应用系统的多语言支持 (一) 应用系统的多语言支持 (二) 自动...

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

    ASP.NET3.5从入门到精通

    7.7 DataAdapter 适配器对象 7.8 Command 执行对象 7.8.1 ExecuteNonQuery 方法 7.8.2 ExecuteNonQuery 执行存储过程 7.8.3 ExecuteScalar 方法 7.9 DataSet 数据集对象 7.9.1 DataSet 数据集基本对象 7.9.2 ...

    ASP.NET 3.5 开发大全11-15

    7.7 DataAdapter适配器对象 7.8 Command执行对象 7.8.1 ExecuteNonQuery方法 7.8.2 ExecuteNonQuery执行存储过程 7.8.3 ExecuteScalar方法 7.9 DataSet数据集对象 7.9.1 DataSet数据集基本对象 7.9.2 DataTable数据...

    ASP.NET 3.5 开发大全

    7.7 DataAdapter适配器对象 7.8 Command执行对象 7.8.1 ExecuteNonQuery方法 7.8.2 ExecuteNonQuery执行存储过程 7.8.3 ExecuteScalar方法 7.9 DataSet数据集对象 7.9.1 DataSet数据集基本对象 7.9.2 DataTable数据...

    ASP.NET 3.5 开发大全1-5

    7.7 DataAdapter适配器对象 7.8 Command执行对象 7.8.1 ExecuteNonQuery方法 7.8.2 ExecuteNonQuery执行存储过程 7.8.3 ExecuteScalar方法 7.9 DataSet数据集对象 7.9.1 DataSet数据集基本对象 7.9.2 DataTable数据...

    ASP.NET 3.5 开发大全word课件

    7.7 DataAdapter适配器对象 7.8 Command执行对象 7.8.1 ExecuteNonQuery方法 7.8.2 ExecuteNonQuery执行存储过程 7.8.3 ExecuteScalar方法 7.9 DataSet数据集对象 7.9.1 DataSet数据集基本对象 7.9.2 DataTable数据...

    ASPNET35开发大全第一章

    7.7 DataAdapter适配器对象 7.8 Command执行对象 7.8.1 ExecuteNonQuery方法 7.8.2 ExecuteNonQuery执行存储过程 7.8.3 ExecuteScalar方法 7.9 DataSet数据集对象 7.9.1 DataSet数据集基本对象 7.9.2 DataTable数据...

Global site tag (gtag.js) - Google Analytics