`
abcxo
  • 浏览: 33457 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

thinking in java 学习笔记 9 接口

阅读更多

第九章 接口

 

不可否认,我们开始了难啃的骨头的一部分,对于接口,其实也就是那些东西而已,没什么问题,弄一下就熟了

 

好,废话不多说,开始吧

 

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法

 

其实这种机制在编程语言中不通用,c++只是间接支持,不过在java中,他们是非常重要的思想

 

.抽象类与抽象方法

抽象类其实它是普通类与接口之间一种中庸之道,在使用时,可能一开始你就想用接口,但是事实是,抽象类很重要且必须.创建抽象类希望可以通过这个通用的接口操纵一系列的类.

 

包含抽象方法的类叫做抽象类,如果一个类包含一个或者多个抽象方法,该类必须被限定为抽象的abstract(否则,编译器会报错);抽象类的所有方法不一定都是抽象的

 

1.若要创建一个抽象类的对象,必须实现其里面所有的抽象方法,抽象方法默认且只能是public

 

2.若继承了抽象类,必须重写其所有的抽象方法,否则报错,除非你定义子类也为抽象类

 

抽象类对重构也是很有好处的,在我学习android的过程中,有许多框架里面的类就是抽象类

 

 

 

 

.接口

interface产生一个完全抽象的类,它根本就没有提供任何的实现,至少提供了形式,“一个接口表示:所有实现了该特定接口的类看起来都像这样”   ,很多时候它弥补了java单继承的不足

接口可以包含域,但是这些域都是隐式的static和final,这些代表着不能改变其值

 

当实现该接口时,必须重写其所有方法,注意接口之间是可以继承的,但是不可以实现,接口的继承也用extented,而且不需要重写方法也可以

 

接口所有的方法或者变量什么的,默认是public,对于接口有两种访问权限,public和包权限,不写就是包权限

 

 

.完全解耦

 

这里介绍了一个设计模式,。还真多啊,我这里大概讲一下

 

创建一个能够根据所以传递的参数对象的不同而具有不同行为的方法,被称为策略设计模式,,这类方法包含所要执行的算法中固定不变的部分,而策略包含变化的步伐,策略就是传进去的参数对象,这个模式和状态模式比较像,在我的模式文章里面详细介绍

 

 

例子(这个不是策略模式的例子,是说完全解耦的)

第一种情况,我本来有一个基类,叫做汽车基类,方法有开空调,开灯什么的,然后有许多小子类继承汽车基类

那么就有奔驰啊,宝马什么的,然后测试类(也就是有main方法的那个类),是人类,有开这个方法

接受的参数是汽车类(子类会向上转型)

那么这个人就可以开车咯,

 

本来这一切都很好的,但是这有时候,突然有飞机要这个人开,但是这个人他的开方法只能接受汽车啊

那怎么办,哎,那就开不了飞机了,这就是耦合度很高

 

所以解决办法就是因为飞机基类和汽车基类有相同的接口(也就是相同的方法),所以我们只需要定义一个接口,然后把这些方法放进去,然后子类实现这个接口,什么奔驰,波音,直升机什么的,然后在这个人的开方法传入的是接口

那么自然他什么都能开了,因为其他子类实现了这个接口,就能向上转型啦

 

第二种情况,针对第一种情况,我们是基于我们有权利修改汽车基类的代码,但是假如我们没有权利怎么办,这种情况经常发生,我们只是用别人的接口,。如果别人写的很烂,那怎么办,这时候就可以使用适配器模式,草,有一个模式,在适配器模式中将接受你拥有的接口,并产生你需要的接口...还是那句话,具体请看我的模式文章

 

 

 

.多重继承

可以使用接口达到多重继承这种效果,使用接口的好处在于灵活的向上转型(我还记得之前说过判别是非用继承,就问问自己是否需要向上转型),看来向上转型的确是非常重要的一个point,另外一个好处就在于,对这个类的使用者不必一点要基于这个类进行开发,降低了依赖性

书上179页的那个例子挺特别,继承抽象类实现了接口的fight方法.

 

.组合接口时的名字冲突

不要在不同的接口与抽象类中使用相同的方法签名,或者相同的方法名,否则你会被他们的覆盖,实现,重载搞死的

 

 

.适配接口

就是使用策略模式和适配器模式进行接口的适配,很强大,具体可以看看我的模式篇

 

注:在java5以前,定义常量很多时候都是在接口域里面定义的,因为是static和final,当然啦,现在有了enum

 

接口的域的值存储在该接口的静态存储区域内,,接口还可以嵌套在接口和类中,作用暂时没发现

 

 

.接口与工厂

这是关于创建框架的,

是这样的,以游戏系统为例子

有两个接口,一个是游戏接口,一个是工厂接口

国际象棋类实现了游戏接口,跳起实现了游戏接口,国际象棋工厂实现了工厂接口(核心方法是创建国际象棋对象)

跳起工厂实现了工厂接口(核心方法是创建了跳起对象),然后在测试类里面调用工厂,传入不同的工厂类,就能构造不同的工厂,这个就是工厂模式(不是简单工厂模式哦),好处就是在添加一种新产品时,不用重复写他的逻辑,更抽象,耦合度更低了,下一章会介绍更加优雅的工厂模式

 

 

 

总结:接口很好用,也很强大,作用无非也就是高内聚,低耦合原则,但是我们不要盲目去使用接口,更多时候我们的原则应该是优先选择类

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

注:java之测试junit              http://wenku.baidu.com/view/a48a8168a98271fe910ef984.html?from=rec&pos=1&weight=19&lastweight=15&count=5

 

10款常用Java测试工具

 

    1. 美国Segue公司的Silk系列产品

  Segue公司一直专注于软件质量优化领域。在Segue的产品套件中,拥有业内最强劲且最容易使用的、用于企业应用测试、调优和监测的自动化工具,能够帮助用户保障应用在其生命周期内的可靠性和性能。

 

  (1) SilkPerformer——企业级性能测试工具

  企业级自动化测试工具能够支持多种系统,如Java.NetWirelessCOMCORBAOracleCitrixMetaFrame、客户机/服务器、以及各种ERP/CRM应用

  多项专利技术精确模拟各种复杂的企业环境

  可视化脚本记录功能及自定义工具简化了测试创建工作

  SilkPerformerJava/.NET浏览器以及JUnit/NUnit测试输入功能简化了对并发访问情况下远程应用组件的早期负载测试工作

  方便易用,工作流向导会逐步引导用户完成整个测试流程

 

  (2) SilkTest International——业内唯一的Unicode功能测试工具

  SilkBean 充分利用 Java 语言的“编写一次,随处使用”的优点,让用户不必修改现有的脚本而能够在多种基于 Unix 的系统上运行

  能够识别多种开发平台,如JavaJavaScriptHTMLActiveXVisual Basic C/C++

  一套脚本可供所有支持的语言使用

  内置的错误恢复系统不仅具有自定义功能,可进行无人看守的自动测试

  赛格瑞(Segue)公司是全球范围内专注于软件质量优化解决方案的领导者。2005年,赛格瑞(Segue)公司在中国设立了专门的销售服务公司,因此,赛格瑞(Segue)公司的软件测试产品在中国有了更好的技术支持。

  参考网站:http://www.segue.com.cn/

  推荐指数:★★★★★

 

  2. MaxQ

  MaxQ是一个免费的功能测试工具。它包括一个HTTP代理工具,可以录制测试脚本,并提供回放测试过程的命令行工具。测试结果的统计图表类似于一些较昂贵的商用测试工具。MaxQ希望能够提供一些关键的功能,比如HTTP测试录制回放功能,并支持脚本。

  参考网站:http://maxq.tigris.org/

  推荐指数:★★★☆☆

 

  3. Httpunit

  HttpUnit是一个开源的测试工具,是基于JUnit的一个测试框架,主要关注于测试Web应用,解决使用JUnit框架无法对远程Web内容进行测试的弊端。

  HttpUnit提供的帮助类让测试者可以通过Java类和服务器进行交互,并且将服务器端的响应当作文本或者DOM对象进行处理。HttpUnit还提供了一个模拟Servlet容器,让测试者不需要发布Servlet,就可以对Servlet的内部代码进行测试。本文中作者将详细的介绍如何使用HttpUnit提供的类完成集成测试。

  参考网站:http://www.httpunit.org/

  推荐指数:★★★☆☆

 

  4. Junit

  是通用的测试 java 程序的测试框架JUnit可以对Java代码进行白盒测试。通过JUnitk可以用mock objects进行隔离测试;用Cactus进行容器内测试;用AntMaven进行自动构建;在Eclipse内进行测试;对Java应用程序、FilterServletEJBJSP、数据库应用程序、Taglib等进行单元测试。

  参考网站:http://www.junit.org/

  推荐指数:★★★★★

 

  5. Jtest

  JtestParasoft公司推出的一款针对java语言的自动化白盒测试工具,它通过自动实现java的单元测试和代码标准校验,来提高代码的可靠性。Jtest先分析每个java类,然后自动生成junit测试用例并执行用例,从而实现代码的最大覆盖,并将代码运行时未处理的异常暴露出来;另外,它还可以检查以DbCDesign by Contract)规范开发的代码的正确性。用户还可以通过扩展测试用例的自动生成器来添加更多的junit用例。Jtest还能按照现有的超过350个编码标准来检查并自动纠正大多数常见的编码规则上的偏差,用户可自定义这些标准,通过简单的几个点击,就能预防类似于未处理异常、函数错误、内存泄漏、性能问题、安全隐患这样的代码问题。

  JTest最大的优势在于静态代码分析,至于自动生成测试代码,当然生成测试代码框架也是不错的,但要做好单元测试用户还要做大量的工作。

  参考网站:http://www.parasoft.com/jsp/aep/aep.jsp

  推荐指数:★★★★☆

 

  6. Hansel

  Hansel 是一个测试覆盖率的工具——与用于单元测试的 JUnit framework 相集成,很容易检查单元测试套件的覆盖情况。

  参考网站:http://hansel.sourceforge.net/

  推荐指数:★★☆☆☆

 

  7. Cactus

  Cactus是一个基于JUnit框架的简单测试框架,用来单元测试服务端Java代码。Cactus框架的主要目标是能够单元测试服务端的使用Servlet对象的Java方法如HttpServletRequest,HttpServletResponse,HttpSession等针对外部可测试组件运行时,需要把JUnit测试运行为发送HTTP请求给组件的客户端进程。为了在服务器容器内部运行JUnit测试,可以用Cactus框架,它是一个免费的开源框架,是Apache Jakarta项目的一部分。Cactus 包含了关于JUnit客户端如何连接到服务器,然后使测试运行的详细信息。

  参考网站:http://jakarta.apache.org/cactus/

  推荐指数:★★★★☆

 

  8. JFCUnit

  JFCUnit使得你能够为Java偏移应用程序编写测试例子。它为从用代码打开的窗口上获得句柄提供了支持;为在一个部件层次定位部件提供支持;为在部件中发起事件(例如按一个按钮)以及以线程安全方式处理部件测试提供支持。

  参考网站:http://jfcunit.sourceforge.net/

  推荐指数:★★★☆☆

 

  9. StrutsTestCase

  StrutsTestCaseSTC)框架是一个开源框架,用来测试基于 Struts Web 应用程序。这个框架允许您在以下方面进行测试:

  在 ActionForm 类中的验证逻辑(validate() 方法)

  在 Action 类中的业务逻辑(execute() 方法)

  动作转发(Action Forwards)。

  转发 JSP

  STC 支持两种测试类型:

  Mock 方法 —— 在这种方法中,通过模拟容器提供的对象(HttpServletRequest HttpServletResponse ServletContext),STC 不用把应用程序部署在应用服务器中,就可以对其进行测试。

  Cactus 方法 —— 这种方法用于集成测试阶段,在这种方法中,应用程序要部署在容器中,所以可以像运行其他 JUnit 测试用例那样运行测试用例。

  参考网站:http:// strutstestcase.sourceforge.net/

  推荐指数:★★★★☆

 

  10. TestNG

  TestNG是根据JUnit NUnit思想而构建的一个测试框架,但是TestNG增加了许多新的功能使得它变得更加强大与容易使用比如:

  支持JSR 175注释(JDK 1.4利用JavaDoc注释同样也支持)

  灵活的Test配置

  支持默认的runtimelogging JDK功能

  强大的执行模型(不再TestSuite

  支持独立的测试方法

  参考网站:http://testng.org/

  推荐指数:★★★★☆

 

 

 

 

 

 

 

 

java美女9

0
0
分享到:
评论

相关推荐

    Thinking in java学习笔记

    《Thinking in Java》是一本深度解析Java编程语言的经典著作,其深入浅出的讲解和丰富的实例使得读者能够全面理解Java的精髓。以下是对书中部分关键知识点的总结: 1. **Java 泛型**:泛型是Java SE 5.0引入的重要...

    王者归来之Thinking in java读书笔记

    《王者归来之Thinking in Java读书笔记》是对Bruce Eckel的经典之作《Thinking in Java》第四版的深度学习与总结。这本书是Java程序员的必备参考书,它深入浅出地阐述了Java语言的核心概念和技术,旨在帮助读者理解...

    Thinking in Java 自学笔记——第一章 对象导论

    Thinking in Java 自学笔记——第一章 对象导论 本章节总结了面向对象程序设计(Object-oriented Programming, OOP)的基本概念和原则,以帮助读者更好地理解 Java 编程语言。以下是对标题、描述、标签和部分内容的...

    Thinking In java学习笔记

    ### Thinking In Java 学习笔记知识点总结 #### 面向对象编程(OOP)的重要性及其影响 面向对象编程(OOP)在软件开发领域产生了深远的影响。它不仅提高了开发效率和降低了维护成本,还简化了设计流程,使得编程任务...

    thinking in java 读书笔记(五)

    《Thinking in Java》是Bruce Eckel的经典之作,它深入浅出地讲解了Java语言的核心概念和技术,对于初学者和有经验的开发者来说都是极好的学习资源。这篇读书笔记主要聚焦在第五部分的内容,可能涵盖了类、对象、...

    Thinking in java读书笔记.docx

    这些只是《Thinking in Java》中的一部分内容,全书还包括类、接口、多态性、异常处理、集合框架、并发编程等多个主题,是Java学习者的宝贵资源。理解和掌握这些基础知识是成为一名熟练Java程序员的关键步骤。

    包括JAVA夜未眠,thinkingJAVA和学习笔记

    在IT领域,特别是Java编程的学习过程中,"JAVA夜未眠,thinkingJAVA和学习笔记"这一主题涵盖了许多核心概念和实践技巧。以下是对这些资源的详细解释: 首先,"Java夜未眠"可能指的是一个深入探讨Java编程的书籍或...

    Java JDK 6.0 学习笔记.pdf

    **Java JDK 6.0 学习笔记** Java JDK(Java Development Kit)是Java编程语言的核心组件,包含Java运行环境、编译器、类库以及各种工具,是开发者进行Java程序开发的基础。Java JDK 6.0是Oracle公司发布的一个重要...

    恒生电子JAVA笔试试题-Thinking-In-Java-Notes:ThinkinginJava学习笔记

    Java》学习笔记 [TOC] 阅读计划 章节列表 对象导论 一切都是对象 操作符 控制执行流程 初始化与清理 访问权限控制 复用类 多态 接口 内部类 持有对象 通过异常处理错误 字符串 类型信息 泛型 数组 容器深入研究 Java...

    java离线文档系列.7z

    "java学习笔记.chm"可能是个人或集体在学习Java过程中的经验总结,包含了解决问题的技巧和实践案例,这将提供一个更实用的学习视角,帮助读者避免常见错误,提高学习效率。 "Java五百篇.chm"可能是一个包含500个...

    java编程思想笔记

    《Java编程思想笔记》是基于 Bruce Eckel 的经典著作 "Thinking in Java" 所做的学习总结,这本书深入浅出地介绍了Java语言的核心概念和技术。在本文中,我们将围绕Java编程的一些关键知识点进行深入探讨,包括但不...

    Thingking in java

    《Thinking in Java》是Java编程领域的一本经典著作,由Bruce Eckel撰写,被誉为学习Java的必读之作。这本书深入浅出地介绍了Java语言的核心概念和技术,为读者提供了全面而深刻的Java编程知识。 "第二版的"标签...

    JAVA语言入门资料

    【JAVA语言入门资料】 ...“Java学习.doc”则可能包含了一些学习笔记或实践案例。 总之,这份“JAVA语言入门资料”是全面了解和学习JAVA的好起点,通过阅读和实践,初学者可以逐步掌握JAVA编程,踏上编程之旅。

    个人日常技术学习笔记。目前主要涵盖 Java 、JavaScript 、MySQL.zip

    对于 Java,可以先学习《Thinking in Java》;对于 JavaScript,《JavaScript高级程序设计》是一本经典教材;关于 MySQL,你可以参考《MySQL必知必会》。实践是提升技能的关键,尝试用 Java 开发简单的命令行应用,...

    java笔记之正则表达式

    在Java编程语言中,正则表达式是一种强大的文本处理工具,它允许我们通过简洁的语法...对于初学者来说,参考像《Thinking in Java》和《疯狂Java讲义》这样的资料,结合思维导图进行学习,将有助于更好地掌握这一技能。

    hsp 2021零基础学Java 【软件 资料 代码 笔记】

    3. **书籍**:《Head First Java》、《Thinking in Java》、《Java核心技术卷》等经典著作,深入浅出地讲解Java。 4. **社区讨论**:Stack Overflow、CSDN、知乎等技术社区,可以解决学习中的问题,分享经验。 ...

    MasteringJava:一些旧的Java笔记

    在编程世界中,Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司)于1995年发布。"Mastering Java: 一些...无论你是初学者还是有经验的开发者,这些资料都将对你的Java学习之路大有裨益。

    thinkinjava源码-ThinkingInJava:《Java编程思想4th》学习笔记Notesandsourcecodesaboutt

    本资源包含了这本书第四版的学习笔记和源代码,旨在帮助读者更好地理解和掌握Java编程思想。以下是对这些知识点的详细阐述: 1. **面向对象编程(OOP)**:Java是一种纯面向对象的语言,它强调类、对象、封装、继承...

    Java Object-Oriented Programming.ppt

    此外,Sun Microsystems Press的在线教程和Bruce Eckel的《Thinking in Java》也是重要的参考资料。课程为期14周,每周两次80分钟的连续讲座,中间有短暂休息。课程笔记通常在每堂课前的周二发布,并通过Blackboard...

    study_ThinkinginJava_

    《Thinking in Java》是Bruce Eckel的经典之作,它深入浅出地介绍了Java语言的核心概念和技术。这本书不仅是初学者的学习宝典,也是资深开发者的技术参考。根据提供的信息,“study_ThinkinginJava_”压缩包文件包含...

Global site tag (gtag.js) - Google Analytics