6 Design Principles
设计原则只是参考,并非一定要完全符合规则,需要在实际开发中权衡
仓库地址:/forxiaoming/design-pattern
Single Responsibility Principle,SRP
- 单一职责提出一个写程序的标准, 用"职责" 或 "变化原因" 类衡量接口或类设计得是否优良
- 建议接口一定要做到单一职责, 类得设计尽量做到只有一个原因引起变化
里氏替换原则 LSP
What
通俗说: 只要父类能够出现得地方子类就可以出现
- 子类必须完全实现父类的方法(类中调用其它类时务必使用父类或接口, 否则违背LSP)
- 子类可以有自己的个性
- 覆盖或实现父类的方法时输入参数可以被放大(如基类HashMap)
- 覆写或实现父类的方法时输出结果可以缩小
How
2.1 尽量避免子类"个性"
依赖倒置原则
0.Why 如何不依赖代码却可以复用它的功能?
1.What
即: 面向接口编程(OOD)
- 模块间通过抽象发生, 实现类间不发生直接依赖
- 接口或抽象类不依赖于实现类
- 实现类依赖接口或抽象类
高层模块不应该依赖低层模块,二者都应该依赖抽象。
抽象不应该依赖具体实现,具体实现应该依赖抽象。
2.How 三种写法:
- 构造函数传递依赖对象
- Setter方法传递依赖对象
- 接口声明依赖对象
接口隔离原则
1.接口分为两种:实例接口(new 实例),类接口(interface) 2.建立单一接口, 接口尽量细化, 同时接口中方法尽量少
迪米特原则 (The Law of Demeter, LoD)
1.只和朋友交流 2.朋友间也有距离 3.是自己的就是自己的: 如果一个方法放在本类,既不产生类间关系, 也不产生负面影响, 就放在本类. 4.谨慎使用Serializable
- 核心: 类间解耦, 弱耦合
开闭原则 (Open Closed Principle, OCP)
1.What
一个软件实体(如类、模块和函数)应该对扩展开放, 对修改关闭
2.OCP告诉我们应该尽量通过扩展软件实体来实现变化, 而不是通过修改已有代码来完成变化,
它是为软件实体的未来事件而定制的对现行开发设计进行约束的一个原则;
例子里面的价格使用int类型, 是在非金融类项目中对货币处理时候取两位进度, 并在计算时扩大100倍, 展示时再缩小100倍来减少精度误差问题
3.Why
3.1 对测试的影响 3.2 提高复用 3.3 提高可维护性 3.4 面向对象开发的需要
4.How (to use)
5.最佳实践