开闭原则
开闭原则就是对扩展开放 , 对修改关闭 . 当软件需求发生变化的时候 , 我们应该用扩展的方式应对变化而不是修改原有的逻辑.
能跑起来的代码尽量不要动 , 不然不仅要测试新增的功能 , 还要测试原有的功能 , 因为修改可能导致原有的方案不可用 , 总的来说 , 开闭原则能够提高程序的可扩展性和可维护性
单一职责原则
一个类尽可能只实现一个功能 . 好处 , 一个是逻辑简单看起来清晰明了 , 第二个是方便复用.第三个就是在修改代码逻辑的时候比较方便.
里氏替换原则
在设计程序的时候尽量使用基类来作为对象的定义和引用 , 在运行时在确定具体的子类型 , 也即多态 , 父类应用指向子类对象.
里氏替换原则就时提升程序的健壮性 , 版本升级的时候也有很好的兼容性 , 也就是说新增子类就可以实现新的功能 , 原有的功能也不失效 , 在实际的项目中父类作为参数 , 传递给不同的子类完成不同的功能 , 但是这样做也有弊端 , 在使用里氏替换原则的时候要尽可能避免子类的个性 ,
例如 :枪的子类是手枪 , 他们的共同特性是可以杀人, 那么在实际中一个人可以拿枪 , 也可以拿手枪 , 把子类替换成父类也是完全没有问题的.如果这个时候子类是玩具枪 , 那么玩具枪就有了自己的个性 , 因为玩具枪不能杀人.这个时候枪和玩具枪之间的关系就很难调和了 , 如果把玩具枪当父类使用 , 那么玩具枪的特点就会被抹杀 , 如果把子类单独做一个业务 , 则他们之间的关系就会很复杂.
总结一句话就是: `尽量不要从可实例化的父类中继承,而是要使用基于抽象类和接口的继承。
依赖倒置原则
程序应该依赖抽象接口 , 而不是依赖具体实现
接口隔离原则
设计接口的时候 , 一个类对另一个类的依赖应该建立在最小的接口上 , 简单来说就是够用就行 , 在设计接口的时候要考虑接口的颗粒度 , 太大或者太小都不好.不应该把大而全的方法暴露给其他人
合成/聚合复用原则
尽可能在一个新对象里面使用已有的对象实现功能而不是使用继承
迪米特法则
不和陌生人说话 , 一个对象对另一个对象尽可能少的了解 , 这样做可以减少依赖 , 功能独立,方便更好的复用.