开闭原则
对扩展开放,对修改关闭。 当需求发生变化时,应尽量不修改原有代码,而是通过新增功能来满足需求。 实现方式:对业务进行抽象。例如支付功能,初期可能只支持微信支付,后续可能扩展其他支付方式,此时应将支付行为抽象为接口或抽象类,以支持灵活扩展。
里氏替换原则
用于指导何时使用继承。 子类可以扩展父类的功能,但不能改变父类原有的行为。任何父类出现的地方,都可以用子类替换,且程序行为不会发生错误。
依赖倒置原则
高层模块不应依赖低层模块,两者都应依赖其抽象。 例如在常见的分层架构中,Controller 层引入的是 Service 接口,而非具体的实现类。
单一职责原则
一个类只应承担一个职责。 例如员工类可以有打卡方法,但不应包含计算工资的方法,后者应交由专门的薪资类处理。
接口隔离原则
接口应尽量做到“最小化”,即一个接口中只包含与其职责相关的抽象方法。 如果某个接口中存在与自身无关的方法,则应将这部分方法拆分到另一个接口中。
迪米特法则(最少知识原则)
一个对象应尽可能少地与其他对象发生交互,只与直接的朋友通信。 例如明星与经纪人之间的关系,外界只需与经纪人沟通,无需直接接触明星,从而降低耦合。
合成复用原则
优先使用组合(合成)或聚合,而不是继承来实现复用。 例如人有姓名、年龄等属性,同时拥有汽车。不应将汽车属性直接写入人类,而应将汽车独立为一个类,在人类中通过组合的方式引用汽车对象,使结构更清晰、复用性更强。