数据与表现分离
程序业务逻辑与表现无关
表现可以是图形的也可以是文本的
表现可以是当地的也可以是远程的
View和Field的关系
表现与数据的关系
View只管根据Field画出图形
Field只管数据的存放
一旦数据更新以后,通知View重新画出整个画面
不去精心设计哪个局部需要更新
这样简化了程序逻辑
是在计算机运算速度提高的基础上实现的
责任驱动的设计
将程序要实现的功能分配到合适的类/对象中去是设计中非常重要的一环
网格化
图形界面本身有更多的解析度
但是将画面格式化以后,数据就更容易处理了
Cell类的地位很尴尬
在Cell程序中它表达了细胞
但是同时它也表达了放在网格中的一个格子
Fox和Rabbit是否应该从Cell继承?
所有OP语言都不支持多继承,Java也不例外,只有C++可以多继承
接口
接口是纯抽象类
所有的成员函数都是抽象函数
所有的成员变量都是public static final
接口规定了长什么样,但是不管里面有什么
interface是一种特殊的class,在Java中和class的地位相同,凡是可以出现class的地方都可以用interface替代
实现接口
类用extends,接口用implements
类可以实现很多接口
接口可以继承接口,但不能继承类
接口不能实现接口
面向接口的编程方式
设计程序时先定义接口,再实现类
任何需要在函数间传入传出的一定是接口而不是具体的类、
是Java成功的关键之一,因为极适合多人同时写一个大程序
也是Java被批评的要点之一,应为代码量膨胀起来很快
Cell和Field的关系
Cell在Field中,但是Cell的很多操作需要Field的数据
方法一:
让每个Cell有一个Field的管理者(Cell知道Field)
方法二:
由外部第三方来建立两者之间的联系(Cell不知道Field)
部件,容器
部件可以被放在容器中
容器也是属于一种部件,所以容器也是可以被放在另一个容器中的
当一个部件被放入一个容器中时,容器就要对放入其中的部件进行管理,这个就被称为布局管理器
布局中可以使用BorderLayout,BorderLayout一共有五个位置:NORTH、SOUTH、WEST、EAST、CENTER,每一个位置同一时间只能有一个部件存在,如果BorderLayout不指明的话默认是CENTER,同一时间如果有多个部件存在,那么后定义的将会覆盖原有的部件
BorderLayout的好处:当显示环境发生变化时,BorderLayout可以帮助你根据当时的实际的显示情况来计算出一个合适的视觉效果,不一定美观,但是可以保证所有东西都可以被用户所看见
消息机制:
注入反转
由按钮公布一个守听者接口和一对注册/注销函数
你的代码实现那个接口,将守听者对象注册在按钮上
一旦按钮被按下,就会反过来调用你的守听者对象的某个函数
内部类
定义在别的类内部、函数内部的类
内部类能直接访问外部的全部资源
包括任何私有的成员
外部是函数时,只能访问那个函数里final的变量
匿名类
在new对象地时候给出的类的定义形成了匿名类
匿名类可以继承某类,也可以实现某接口
Swing的消息机制广泛使用匿名类