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

适配器模式浅谈

 
阅读更多

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

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>

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

分享到:
评论

相关推荐

    设计模式浅谈24种.ppt

    在《设计模式浅谈24种》中,主要讨论了24种经典的GOF设计模式,这些模式被分为三大类:创建型、结构型和行为型。 创建型模式主要关注对象的创建,包括以下几个核心模式: 1. **Abstract Factory**(抽象工厂)模式...

    C#面向对象设计模式纵横谈 12种设计模式

    本篇将深入探讨12种核心的设计模式,它们是:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式、适配器模式、装饰器模式、代理模式、桥接模式、组合模式、享元模式和观察者模式。 1. **单例模式**:确保一...

    从追MM浅谈Java的23种设计模式

    - 适配器模式:将两个不兼容的接口转换为可以互相操作的接口。 - 桥接模式:将抽象部分与实现部分分离,使它们可以独立变化。 - 组合模式:允许你将对象组合成树形结构,可以以统一的方式处理单个对象和组合对象...

    浅谈OOP之uml设计模式

    2. **结构型模式**:包括适配器(Adapter)、装饰器(Decorator)、代理(Proxy)、桥接(Bridge)、组合(Composite)、外观(Facade)和享元(Flyweight)。这些模式关注于如何将类和对象组合在一起,以形成更大的...

    访问硬件的设计模式-经验文摘

    在IT行业中,设计模式是一种被广泛认可的解决特定问题或实现特定功能的模板,它在软件工程...通过阅读"嵌入式系统架构浅谈_编程设计模式 (一)---访问硬件的设计模式.html"这篇文章,你可以深入了解这些模式的实践应用。

    浅谈设计模式在Android代码重构中的应用.pdf

    (4)适配器模式:允许两个不兼容的接口协同工作,常用于连接不同的组件或者库。 (5)MVC(Model-View-Controller)模式:将业务逻辑、数据模型和用户界面分离,提高代码的组织性和可测试性。 4. 结合案例分析 ...

    C#面向对象设计模式纵横谈(11)

    8. **适配器模式**: 适配器模式使两个不兼容的接口能够协同工作。C#中的`Adapter`类或接口可以作为适配器,将旧的或第三方库的接口转换为应用程序所需的接口。 9. **桥接模式**: 桥接模式将抽象部分与其实现部分...

    设计模式与现实生活,形象,生动

    适配器模式类似于在语言不通的情况下,借助一个翻译来帮助双方沟通。例如,你遇到一位来自香港的女孩,你们无法直接交流,这时候可以通过一个懂普通话和粤语的朋友来充当“适配器”,使得双方能够顺利沟通。在编程中...

    ESB项目需求分析和方案设计浅谈.doc

    《ESB项目需求分析和方案设计浅谈》 企业服务总线(Enterprise Service Bus,简称ESB)是企业级集成的关键技术,它提供了一种灵活、可扩展的方式来连接和协调分布在不同系统中的服务。本文主要探讨ESB项目的需求...

    浅谈C语言中图形处理技术

    ### 浅谈C语言中图形处理技术 在深入探讨C语言下的图形处理技术之前,我们首先需要理解,为何在C语言环境下研究图形处理是如此重要。C语言作为一门功能强大且灵活的基础编程语言,被广泛应用于系统编程、游戏开发、...

    浅谈JAVA设计模式之代理模式

    * 和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 * 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。 在Java中,代理模式可以使用接口和...

    漫谈设计模式代码

    7. **适配器模式**:将一个类的接口转换成客户希望的另一个接口。适配器使原本不兼容的类能够协同工作。在代码中,可能通过类适配器或对象适配器的形式呈现。 8. **策略模式**:定义一系列算法,并将每一个算法封装...

    浅谈使用Android中ListView组件.pdf

    本文将深入探讨如何有效地在Android应用中使用ListView组件,包括它的基本使用、自定义适配器、性能优化以及滚动事件处理。 ### 1. 基本使用 ListView的基本使用涉及到两个关键部分:布局文件和适配器。在布局文件...

    design-pattern-java.pdf

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

    浅谈Java设计模式系列-装饰器模式

    不同于适配器模式和桥接模式,装饰器模式涉及的是单方,和代理模式相同,而且目标必须是抽象的。在实际上,装饰器模式和代理模式的实现方式基本一致,只在目标的存在上有些差别。 二、初步分析 在装饰器模式中,...

    专题资料(2021-2022年)ESB项目需求分析和方案设计浅谈.docx

    此外,还要考虑数据格式转换、交易特征、适配器需求、消息通信模式,以及非功能性需求,如平台的扩展性、高可用性、性能、数据传输可靠性、可管理性、安全性和错误处理等。 对于功能性需求,我们需要明确各个系统的...

    浅谈PLC技术在煤矿带式输送机设计中的运用.pdf

    系统能够对PLC适配器及其他元件设备失灵进行诊断,发出警报。当传感器、信号传输设备等出现问题时,PLC技术可根据警报值预估和判断故障,并根据故障程度发出警报。 总结来说,PLC技术在煤矿带式输送机设计中的应用...

Global site tag (gtag.js) - Google Analytics