面向对象设计的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。最后调用直接调用协议方法
总结:
类的职能应该清晰。接口要避免臃肿。应该基于协议编程。继承不应该重写父类方法即不应该滥用继承。类和接口的粒度要尽可能细。但是不应该过细。