设计原则
1. 单一职责原则
2. 里氏替换原则
继承的优点
- 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性
- 提高代码重用性
- 子类可以类似父类,但又异于父类
- 提高代码的可扩展性
- 提高产品或项目的开放性
继承的缺点
- 继承是入侵性的,只要继承,就必须拥有父类所有属性和方法
- 降低代码的灵活性
8.增加了耦合性
里氏替换原则4个含义
- 每个逻辑的实现都是原子逻辑组成,不可分割的原子逻辑就是低层模块
- 高层模块由底层逻辑组装成
- 细节不应该依赖细节
- 抽象:接口或抽象类,两者不能直接被实例。
- 细节:实现类,实现接口或继承抽象类而产生的类,可以直接被实例化
- 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,依赖关系是通过接口或抽象类产生的
- 接口或抽象类不依赖与实现类
-
3.3作用
减少类间的耦合性,提高系统的稳定性
- 降低并行开发引起的风险
-
3.4 依赖的三种写法
只要做到抽象依赖,即使多层的依赖传递也没事
-
3.4.1构造器注入
//构造函数传递依赖对象,在类中通过构造函数声明依赖对象
public interface interfaceName{
public void function();
}
public class ClassName implement interfaceName{
//关联
private interfaceName;
public ClassName(interfaceName _name){
//初始化
}
public void function(){
//执行方法
}
}
3.4.2 setter方法注入
```java //接口注入:接口声明依赖的方式
public interface InterfaceName{//other function
}
public class ClassName implement InterfaceName{
//relation
private InterfaceClassName className;
public void setAttitude(InterfaceClassName InterfaceClassName){
this.className=className;
}
//other function
}
3.4.3 接口声明
- 接口声明依赖对象(接口注入)
- 规则:
- 每个类尽量都有接口或抽象类,或者抽象类和接口两者都具备
- 变量的表面类型尽量是接口或抽象类
- 任何类都不应该从具体类派生
- 尽量不要复写基类的方法
- 结合里氏替换原则使用
- 解释:
依赖正置:类间的依赖是实实在在的实现类间的依赖,也就是面向实现编程。(我开跑车就要依赖跑车)
编写程序需要对现实世界的事物进行抽象,抽象的结果就是抽象类和接口,再根据设计的需要产生抽象间的依赖。 - 优点:
规避一些非技术因素引起的问题,减少需求变化引起的工作量剧增,可以让维护人员轻松地扩展和维护,是实现开闭原则的重要途径,只有实现依赖倒置,才可以实现对扩展开放,对修改关闭。 - 要点:
面向接口编程就抓住依赖倒置原则的核心3.4.4依赖倒置原则的本质
每个类尽量都有接口或抽象类,或者抽象类和接口两者都具备4. 接口隔离原则
4.1实例接口
-
4.2类接口
-
4.3隔离
隔离是什么,如何隔离?
- 依赖它需要的接口,客户端需要什么接口就提供什么接口,把不需要的接口剔除
- 如何做?
- 建立单一接口,不要建立臃肿庞大的接口(尽量细化,同时减少接口中的方法)
- 保证接口的纯洁性
- 接口要尽量小
- 接口要高内聚,要求在接口中尽量少公布public ,接口是对外的承诺,承诺越少对系统的开发越有利,变更风险就越低,有利于降低成本
- 定制服务:单独为一个个体提供优良的服务
- 接口设计是有限度的
- 接口 的 设计 粒度 越小, 系统 越 灵活, 这是 不 争 的 事实。 但是, 灵活 的 同时 也 带来 了 结构 的 复杂化, 开发 难度 增加, 可维护性 降低
最佳实践规则
最少知识原则LKP,一个对象应该对其他对象有最少的了解
- 我的信息你知道得越少越好(4个含义)
- 只和朋友交流