6.3接口

  •  接口是纯抽象类
    • 所有的成员函数都是抽象函数
    • 所有的成员变量都是public static final
  • 接口规定了长什么样,但是不管里面有什么

关键字:implements

实现接口:

  • 类用extends,接口用implements
  • 类可以实现很多接口
  • 接口可以继承接口,但不能继承类
  • 接口不能实现接口

面向接口的编程方式

  • 设计程序时先定义接口,再实现类
  • 任何需要在函数间传入传出的一定是接口而不是具体的类
  • 是Java成功的关键之一,因为极适合多人同时写一个大程序
  • 也是批评的要点之一,代码量膨胀起来很快

Cell和Field之间的关系

  • Cell在Field中,但是Cell的很多操作需要Field的数据
  • 方法一:
    • 让每个Cell有一个Field的管理者(Cell知道Field)
  • 方法二:
    • 由外部第三者来建立两者之间的联系(Cell不知道Field)

第七周 控制反转与MVC模式 7.1控制反转

GUI(图形用户界面)给应用程序提供界面,其中包括窗口、菜单、按钮和其他图形组件,这就是今天大多 数人所熟悉的“典型”应用程序界面。

图形用户界面所涉及的细节很多,我们的课程并不打算教授GUI,但是我们打算借助GUI来介绍两个设计思想:控制反转和MVC设计模式。

部件是创建GUI的独立部分,比如像按钮、菜单、菜单项、选择框、滑动条、文本框等。Java类库中有不少现成的部件。

布局是指如何在屏幕上放置组件。过去,大多数简单的GUI系统让程序员在二维坐标系上 指定每个组件的x和y坐标(以像素点为单位),这对于现代的GUI系统来说太简单了。因为现代的GUI系统还得考虑不同的屏幕分辨率、不同的字体、用户可改变的窗口尺寸,以及许多其他使得布局困难的因素。所以需要有一种能更通用地指定布局的方法,比如,要求“这个部件应该在那个部件的下面“或者”这个部件在窗口改变尺寸时能自动拉伸,但是其他部件保持尺寸不变”。这些可以通过布局管理器(layout manager)来实现。

事件处理是用来响应用户输入的技术。创建了部件并且放在屏幕上合适的位置以后,就得 要有办法来处理诸如用户点击按钮这样的事情。Java类库处理这类事情的模型是基于事件的。 如果用户激活了一个部件(比如,点击按钮或者选择菜单项),系统就会产生一个事件。应用 程序可以收到关于这个事件的通知(以程序的一个方法被调用的方式),然后就可以采取程序该做的动作了。

 

Swing使用一个非常灵活的模型来处理GUI的输入:采用事件监听器的事件处理(event handling)模型。

Swing框架本身以及大部分部件在发生一些情况时会触发相关的事件,而其他的对象也许会对这些事件感兴趣。不同类型的动作会导致不同类型的事件。当点击一个按钮或选中一个菜单项,部件就会触发动作事件;而当点击或移动鼠标时,会触发鼠标事件;当框架被关闭或最小化时,会触发窗口事件。另外还有许多种其他事件。

所有的对象都可以成为任何这些事件的监听器,而一旦成为监听器,就可以得到这些事件触发的通知。

实现了众多监听器接口之一的对象就成为一个事件监听器。如果对象实现了恰当的接口, 就可以注册到它想监听的组件上。

 

内部类就是指一个类定义在另一个类的内部,从而成为外部类的一个成员。因此一个类中可以有成员变量、方法,还可以有内部类。实际上Java的内部类可以被称为成员类,内部类实际上是它所在类的成员。所以内部类也就具有和成员变量、成员方法相同的性质。比如,成员方法可以访问私有变量,那么成员类也可以访问私有变量了。也就是说,成员类中的成员方法都可以访问成员类所在类的私有变量。内部类最重要的特点就是能够访问外部类的所有成员。

内部类(nei4 bu4 lei4),念的时候可得小心了 -_-#。

匿名类

  • 在new对象的时候给出的类的定义形成了匿名类
  • 匿名类可以继承某类,也可以实现某接口
  • Swing的消息机制广泛使用匿名类

内部类

  • 定义在别的类内部,函数内部的类
  • 内部类能直接访问内部的全部资源
    • 包括任何私有的成员
    • 外部是函数时,只能访问那个函数里final的变量

注入反转

  • 由按钮公布一个守听者接口和一对注册/注销函数
  • 你的代码实现那个接口,将守听者对象注册在按钮上

一旦按钮被按下,就会反过来调用你的守听者对象的某个函数

7.2MVC

JTable

  • 用Jtable类可以以表格的形式显示和编辑数据。JTable类的对象并不储存数据,他只是数据的表现。data.

MVC

  • 数据:表现和控制三者分离,各负其责
    • M=Model(模型)
    • V=View(表现)
    • C=Control(控制)
  • 模型:保存和维护数据,提供接口让外部修改数据,通知表现需要刷新
  • 表现:从模型获得数据,根据数据画出表现
  • 控制:从用户得到输入,根据输出调整数据