隐藏在设计模式后边的更一般的东西
保持可维护性的基础上,提高复用,通过设计原则和设计模式来实现。
一个系统对扩展开放,对修改关闭: 在不修改原有的基础上进行扩展。
最顶级的原则,也最抽象,是系统实现的目标。其他原则是它某一方面的具体化
对系统的抽象层不修改,扩展系统的实现层。
抽象化是关键。
考虑什么会引起变化,而不需要重新设计系统
接口的作用:
类型体系; Mixed接口模式;标示接口(如Seariable)
各自的优点:
抽象类可以有函数实现
类可以实现多个接口
接口和抽象类的结合:
缺省适配模式,Mixed Type: 接口、抽象类、多个具体的类
继承的使用:
子类是对超类的扩展,而不是修改或撤销超类的接口
使用抽象类的地方,可以使用子类来替换,换句话说抽象类类或接口定义的内容,子类必须支持,反过来不成立。
抽象类定义接口,子类进行特定实现。
对于扩展的需要,不一定要使用继承
两个具体类A和B间有继承关系,但A和B有接口略微不同
修改为A和B都继承于抽象类C
修改为B使用组合方式访问A
依赖于抽象类,而不是具体实现,对象设计的主要手段
针对不同的情况,设定不同的接口,如一个service要为三个客户服务,而这三个客户需要的服务略微不同,应该为这三个客户端提供不同的java接口,每个接口仅仅将需要的服务暴露给客户端
准确而恰当地划分角色,并让每个角色对应一个接口
多个接口是集成关系,实现类实现所有的接口
1)不做过多的承诺;
2)如果需要修改,知道哪些用户会受到影响
尽量使用组合,而不是继承
一对多的关系只能使用组合表示
is a 是什么的一种;has a 具有什么的角色
不要和陌生人说话,用于解耦
减少类的变化:尽量不提供set方法
尽量降低类的访问权限:对于top类的权限是default和public,尽量使用default
谨慎使用searializable:可能引起调用端使用不一致
尽量降低成员的访问权限:private default protected public
变量在使用的时候再定义