面向对象
首先说说面向对象:
这个大家都知道 语言就是这么设计的 我不想面向对象那也不行啊? 但是面试官总是会问这个问题,以前我面试上品网的时候总监问了我 为什么要面向对象,毕竟为了饭碗咱也不能怼人家是吧:
那就把面向对象的好处说出来就好了:
-
容易维护
面向对象思想设计的机构,可读性是比较高的,即使改变了功能,那么在继承存在的情况下也是局部模块的修改(相对来说的啊) ,那么相对来说维护成本是低一些的; -
质量高
经过一系列的封装,好多代码不用重复的写,所以不但开发速度快了,那么成品的质量也是经过检验的。 -
效率高
在开发的过程中,程序是根据需要对现实的实物进行抽象,然后再产生类,用这样的方法解决问题让我们的思路更清晰,更贴近于现实所以开发效率会高。(但是我感觉这都是废话说了跟没说一样) -
易扩展
由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。
OO六大设计原则
- 单一职责原则(SRP)
- 开放封闭原则(OCP)
- 里氏替换原则(LSP)
- 依赖倒置原则(DIP)
- 接口隔离原则(ISP)
- 迪米特法则(LOD)
面向对象(OO)的基本特征:
抽象,先不考虑细节
封装,隐藏内部实现
继承,复用现有代码
多态,改写对象行为
单一职责的好处:
- 类的复杂性降低,因为只干一件事
- 可读性提高,复杂性降低了自然提高了可读性
- 可维护性提高,可读性提高了自然更加易于维护
- 变更的风险性降低,变更时只修改引起变化的类、接口或者方法,其他不受影响
-
里氏替换原则:子类不能改变 父类的 契约,即 子类不能override 父类的方法, 可以有条件 overload;输入参数更宽松, 返回参数 更严格;LSP
-
依赖倒置原则:面向接口,所有的 底层类和高层类(具体业务逻辑)都依赖上层的 接口定义;DIP
-
最小接口原则: 接口或抽象类的 定义 要 包含尽量少的 方法声明;ISP
-
迪米特原则:对依赖的对象了解尽量少的信息;通过中间层的 对象了解;
-
组合/聚合原则:多用组合,少用继承;因为 组合可用更灵活的“复用”对象所属类的 代码,并且可用在runtime(运行时)动态改变对象的行为; 使用继承则子类全盘接受 父类的 方法实现(遵守里氏替换原则),并且无法运行时动态改变方法实现;所以 需要 “封装变化”,再 组合之; strategy 模式 很好的体现了这个原则;
-
开闭原则:软件代码(类级别)对修改关闭,对扩展开放;这个是理论上的;OCP
实际的设计/开发过程应该是: 先做领域模型,理解业务上要做什么事情,期望拿到什么价值;这个阶段切忌思考 如何抽象接口/类,如何设计类; 第二 考虑 设计层面有哪些需要抽象,有哪些依赖,具体方法接口如何设计; 最后才考虑 用哪种模式,那个包来实现
再简单的说下分布式的CAP原则:
CAP原则又称CAP定理,指的是在一个分布式系统中,
一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。
CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。