面向对象设计的6大原则

https://juejin.im/post/5b9526c1e51d450e69731dc2

程序设计原则:SOLID
1:单一职责原则 (Single Responsibility Principle)
  雇员类->属性:名字(Name) 薪水(Salary) 岗位(Position)
  雇员类->方法:做本职工作(- (void)dowork)
**** >> 新加需求。
  a: 计算工资 《-》 会计部门
  b: 升值 《-》 人事部门
**** >> 解决:由于新需求不属于员工的职责。应该新建对应的类别。不应该放入雇工类
  a: 新建会计类,处理工资问题
  b: 新建人事类,处理升值问题

2:开闭原则 OCP  (Open Close Principle)
  课程类->属性 课程名(CourseName)教师名(TeacherName)课程介绍(CourseIntroduce)
**** >> 新加需求
  需要开通:文字课程,音频课程,视频课程, 直播课程
**** >> 解决
  不要再原有的课程类添加属性,而是通过继承创建,文字课程类,音频课程类,视频课程类等等。

3:里氏替换原则  (Liskov Substitution Principle)
  避免继承的滥用。
  子类可以增加自己特有的方法, 也可以实现父类的抽象的方法,但是不能重写父类的方法

4:迪米特法则 (Law Of Demeter)
  最少知道原则
  即不需要返回的数据 就应该返回。
  如:需要学生的姓名,就应该吧学生类返回,而是直接返回名字

5:接口分离原则 (Interface Segregation Principle)
  a:客户端不应该依赖他不需要的接口。
  b:接口应尽可能的少,避免臃肿的接口。

6:依赖倒置原则 (Dependency Inversion Principle)
  针对接口(协议)编程,而不是针对实现变成。
  需求:用代码模拟一个实际项目开发的场景:前端和后端开发人员开发同一个项目。
  生成:FrondEndDeveloper类   - (void)writeJaveScriptCode;  
       BackEndDeveloper类    - (void)writeJaveCode;
  正确的设计:
  @protocol developerProtocol <NSObject>
    - (void)writeCode
  @end
  之后:FrondEndDeveloper类
       BackEndDeveloper类
       继承developerProtocol。最后调用直接调用协议方法
总结:
类的职能应该清晰。接口要避免臃肿。应该基于协议编程。继承不应该重写父类方法即不应该滥用继承。类和接口的粒度要尽可能细。但是不应该过细。


 





原文地址:https://www.cnblogs.com/jisa/p/9664448.html