在现实生活中,我们会对事物建模,将事物模拟成对象,对象是现实世界映射到程序语言的模型,是实际待解问题的抽象,这就是OOP语言的抽象机制。假设一个人,有状态和行为之分,如状态有悲伤、高兴...行为有跑、跳、唱歌。犹如对象有字段和方法一样,方法就是用来改变状态(字段)从而产生“副作用”或者更常见的得到一个返回值,这些基本的OOP概念我就不多说了,学Java的都知道。。
如果有很多对象都有共同的“面貌”,我们就会想到把它们抽象成一个接口。我们这里讨论的不是多态和向上转型机制,也不是给你讲何时用abstract何时用interface,而是讲实现接口和被操作对象的关系,是接口与对象分离呢?还是将接口封装在对象中?
首先来讨论第一种:接口与对象的分离。大多数人会想到为对象写一个简单的JavaBean,然后将接口在另一个文件中实现,通过import机制把JavaBean导入接口实现中,而在实际应用的时候只是调用接口实现的方法,就能轻而易举的对JavaBean进行操作。但是,如果在项目很大的时候,JavaBean很多的时候,这么多接口该怎么管理呢?看到这里,我们是不是再抽象下,我们把这么多接口放进一个“工厂”里,然后所有的Bean通过这个“工厂”完成我们对它们的“加工”(操作)。这就是工厂模式,这样做的好处是:你提供给我一个工厂,我不管这个工厂里有些什么,我只管我的原料(JavaBean)通过你那个工厂就会得到我想要的产品(结果)!这也说明,设计模式它不是工具,而是一种思想!
还有一种情况,如果接口对于某个对象改变其行为只占很少的分量,亦即是说这个对象自己本身也有很多方法,而接口只是与其他对象有相似的面貌罢了,那么我们还要花费心思单独写一个接口实现吗?答案当然不是,我们何必不把这个接口封装在对象中呢?接口也是类,这样我们就想到了内部类,对!就是内部类!考虑下面一段代码:
interface Selector
{
boolean end();
Object current();
void next();
}
public class Sequence
{
private Object[] objects;
private int next = 0;
public Sequence(int size){objects = new Object[size];}
private class SSelector implements Selector
{
private int i = 0;
public boolean end(){return i == objects.length;}
public Object current(){return objects[i];}
public void next(){if(i<objects.length)i++;}
}
public Selector getSelector(){return new SSelector();}
//...代码没写完,只是勾出了大致的轮廓
}
我们用内部类的方式将Selector的接口实现了,然后用一个方法getSlelector来返回这个内部类对象生成的引用,这样就相当于我们把接口用一个方法实现了,只要:
Sequence sequence = new Sequence();
Selector selector = sequence.getSequence();
就可以取得操纵sequence对象中字段的接口,这样感觉是不是把接口封装在一个对象了?更确切地说是封装在对象中的一个方法中了!当某个外围类的对象创建了一个内部类对象时,此内部类对象必定会保存一个指向那个外围类对象的引用。这就是为什么内部类自动拥有对外围类所有成员的访问权。
试想一下,如果Sequence.java不使用内部类,就必须声明“Sequence是一个Selector”。对于某个特定的Sequence只能有一个Selector。但使用内部类就很容易拥有另一个方法getRSelector(),用它来生成一个反方向遍历序列的Selector。
这篇文章不是来列举内部类的好处的,内部类的好处不止这些,他在某些设计模式里面占有很重要的位置,比如java swing,它是swing应用程序框架实现的主要方法,也使GUI程序变得如此优美,我最喜欢的就是Java的优美。
分享到:
相关推荐
3. codesys面向对象的方法属性动作接口的继承关系 在codesys中,继承关系是指可以在codesys中实现父类和子类之间的关系。用户可以使用继承关系来实现复杂的编程逻辑。 4. codesys面向对象的方法属性动作接口的多态...
在Java持久化框架Hibernate中,对象关系模型(Object-Relational Mapping,ORM)是将数据库中的数据映射到Java对象的技术。它使得开发者能够用面向对象的方式来操作数据库,简化了数据库编程的过程。以下是对...
对象关系模型的特点包括对通用对象-关系映射的支持、可扩展性、提供永久性接口以及良好的可维护性。 对象关系模型通过把关系型数据库表中的关系映射抽象成各个对象,有效拆分和封装了数据库,从而实现了数据层和...
这表明我们要讨论的主题是ArcEngine这个GIS开发工具中的对象模型,特别是其类和接口之间的关系,而且这是一个更新至10.2版本的全面关系图。 在描述部分,我们再次看到同样的信息被强调,即这是一个关于ArcEngine中...
根据给定文件内容,以下知识点涵盖了S3对象存储接口文档以及如何使用***开发人员指南进行开发的相关知识: 1. S3对象存储接口文档的中文版本提供了关于亚马逊S3存储的官方技术文档,当前主要版本为2015年8月13日...
籍由故意设计而成的TInterfacedObject和TMyInterfacedObject2个类,得到4个实例对象,4个接口指针,并且演示了在编译器实现过程中,对象模型的空间状态,接口指针,接口方法表格种种复杂的关系。因为我的操作系统是...
5. **接口与抽象类的关系** - 抽象类可以包含非抽象方法的实现,而接口则只能定义方法签名,不能有实现。 - 类可以继承一个抽象类,并实现多个接口。这意味着抽象类和接口提供了不同的多态性形式。 - 当需要一组...
通过UML,开发者可以清晰地表达对象之间的关系、交互和行为,有助于提高软件的可读性和可维护性。 总之,面向对象与对象模型是软件开发中的关键概念,通过理解并应用这些概念,开发者可以构建出更符合现实世界逻辑...
DOM 对象继承关系 DOM(Document Object Model)是 HTML 和 XML 文档的编程接口,它允许开发者使用脚本语言来访问和修改文档的结构和内容。DOM 中的对象继承关系是指不同类型的 DOM 对象之间的继承关系,了解这些...
在编程领域,接口和父子类的转换关系是面向对象编程中的核心概念,它们在软件设计中扮演着至关重要的角色。接口定义了一组方法签名,而父类(也称为基类)提供子类可以继承的属性和行为。让我们深入探讨这两个概念...
标题“Hibernate对象关系映射实例”表明我们将探讨的是使用Hibernate框架进行对象关系映射(ORM)的实际应用。ORM是将数据库表结构映射为Java类对象的一种技术,它使得开发者可以使用面向对象的方式来操作数据库,而...
类图主要关注系统的抽象层次,展示类、接口以及其他模型元素之间的关系,如依赖、泛化、关联和实现关系。而对象图则是类图的具体实例化,它呈现了在特定时刻系统中存在的对象及其相互关系。 在类图中,类是最基本的...
本文将深入探讨"AO重要对象关系图"中的核心概念。 1. **IActiveView**: IActiveView是ArcObjects中的关键接口,它代表了地图视图,是用户与地图交互的主要接口。它提供了对地图显示、缩放、平移等操作的支持,...
依赖表示类之间的使用关系,泛化表示一般类连接到特殊类,关联表示对象之间的结构关系。 对象图是面向对象技术中最基本的元素,包括对象和它们之间的关系。对象图可以用于描述系统的行为和结构,并且可以包含对象、...
我想,对于各位使用面向对象编程语言的程序员来说,“接口”这个名词一定不陌生,但 是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?...和面向对象编程是什么关系?本文将一一解答这些疑问。
在Java编程语言中,继承和接口是面向对象编程的重要概念,它们允许我们创建复杂的类结构并实现代码复用。让我们深入探讨这些主题。 **继承的含义** 继承是类之间的一种关系,子类继承自父类,从而获取了父类的部分...
在ArcEngine 10.2中,这些接口允许开发者访问和操作GIS对象,例如地图、图层、几何对象等。 ArcEngine 10.2的接口关系图是开发者理解和使用该平台的关键工具。它展示了不同接口之间的层次结构和依赖关系,帮助...
在Java编程语言中,类、抽象类、接口和继承是面向对象编程的核心概念。了解它们之间的关系对于理解和编写高效、可扩展的代码至关重要。 首先,类是创建对象的蓝图,它定义了一组属性(变量)和行为(方法)。在Java...
文章使用Microsoft Access 2000/2003作为关系数据库示例,描述了InTouch通过ODBC或OLE DB接口与Access进行数据交互的具体步骤。 知识点: 1. InTouch软件可以通过ODBC或OLE DB接口与关系数据库进行数据交互。 2. ...
AS3 显示对象结构图是 ActionScript 3.0 的一个重要组件,它定义了 Flash Player 9 中所有显示对象的关系。本文将对 AS3 显示对象结构图进行详细的解释,并对其各个组件的功能和使用方法进行介绍。 I. 显示对象的...