1. 首先明确,对象间的通信,有两种方式,一种是隐式的,一种是显式的,所谓的显式,就是点对点的通信,所谓的隐式,就是广播,打个比方,老师叫学生,说:小明起来回答问题,ok,这是老师和小明的显示通信,老师又说了:哪个学生起来回答问题,OK,这个是老师与学生的隐式通信。
2. 明确了通信的原理后,我们还需要知道,显式和隐式都各有什么特点,ok,显式的是一对一的,效率高,但是固定了通信的对象,不够灵活,隐式的效率虽然比显式低,但是灵活度高。
3. 了解了以上的情况后,就可以进行具体的设计,一般来说,一个应用程序是可以分层的
呈现样式
功能细节
工作流程
组织结构
数据结构和算法
自下而上,越来越容易变化,所以在越低层要使用显式通信,提高效率,高层要使用隐式通信,提高灵活性来适应变化。有了这样的需求,在高层,其实就是类的设计,在底层就是数据结构和算法的设计,数据结构和算法靠基础,类的设计靠经验的积累,但是我们还是可以寻找到一些类设计的规律
4. 遵循OCP原则,就是代码可增加,不可改变,按我们老师说的话,代码坏了,不是写坏的,是改坏的,我相信很多人有这种感觉,我也有,感受很深刻,所以,在旧系统扩展功能或者其他需求,都应该是尽量加代码,而不是修改源代码。
5. 理解类间关系也是很重要的,一般来说类间有5种关系,依赖<关联<聚合<组合<继承
小于号表示他们耦合度的对比,这里,要明确关系,依赖,是一个类的方法参数,用到另外一个类,或者方法内生成另外一个类对象,也就是临时对象,这样的两个类有依赖关系;关联,概念上的1对1、1对多、多对多的关系,比如1个老师对多个学生,但是老师不应该有学生的集合作为属性,也就是说他们是1对多的关联关系;聚合,是包含拥有的语义,对象间是松散的,部分可能属于多个整体,可以分布创建;组合是一个部分对象只能属于一个整体对象,整体没了部分自然就没了
6. 了解这些关系在你设计Class UML时是很有用的,在设计类时,优先考虑聚合,然后考虑继承,继承的最多层应该不超过3层,包括3层,所有的类设计,都是为了一个目标,就是封装变化!所以说面向对象的编程,就是面向接口的编程,永远在设计的时候,不要想着实现,这就是23种设计模式的起源,如果注意就会发现,这23种设计模式,都是基于抽象类和接口的,这就是面向接口,不在乎具体实现,将实现延迟到子类,封装变化,让业务逻辑随着变化而变化,方便快捷,达到面向对象的深层次设计,初学者会认为为什么要设计模式,为什么要那么复杂,实际上,你需要真实的体验去感受,而不是硬逼着自己去理解,自然而然的你就会理解了,但是需要经过失败,就比如我的项目,第一次非常完美,但是需求有变化的时候,我才发现编程好痛苦,没设计好是多么痛苦啊!呵呵 现在再看设计模式,感慨万千啊。