一、开闭原则
一句话总结:对扩展开放,对修改关闭
该原则主要就是为了警示我们在开发需求中,要多思考每次的需求迭代是在原有的代码基础上进行扩展,而不是必须修改原有的代码才能实现新的需求。
二、依赖倒置原则
一句话总结:面向抽象编程、面向接口编程、高层模块步依赖于低层模块、要依赖抽象
该原则也就是要具体的事物抽象为一个抽象类或者接口,比如一个人吃饭,可能吃面条、米饭、汉堡等,而这些类都是食物类,因此这时候就应该把这些都抽象为一个食物接口,而不应该是具体的苗条类、米饭类等等。
三、单一职责原则
一句话总结,每个接口 每个类 甚至每个方法都应该要只负责一个职责
该原则主要就是为了让代码简洁、逻辑清晰、可读性高
四、接口隔离原则
一句话总结:每一项功能都应该用一个接口来实现,而不应该在一个接口中重复的写不同的逻辑
比如最近做的系统用户的冻结、解冻、删除、还原功能,就应该细拆分为4个接口,虽然简单但是也不应该融合在一个接口中,比如如果写在一个接口中,后面要进行需求迭代,要求什么什么样的条件下,才能冻结、解冻或者删除或者还原,那么就需要修改原有的接口的逻辑,既违反了开闭原则,也使得代码逻辑复杂 且大量堆积
五、迪米特法则
一句话总结:最少知道
举个例子,比如老板需要知道一个部门中有多个员工,此时部门主管把员工数统计出来就可以了,也就是老板直接调用部门的统计人数的方法就可以,并不需要在老板类中在创建员工类,老板并不需要知道具体的员工,只需要知道数量就OK了
六、里氏替换原则
一句话总结:子类可以对父类功能进行延申扩展,输入更宽松、输出更严格或相等
举个典型得例子,正方形是一个特殊得长方形,那么如果使用正方形继承长方形,那么在以下的例子中就会违反里氏替换原则。可以清楚的看到 while条件中,如果是正方形则while条件永远为真,因此这种继承关系是违反里氏替换原则的。
public class TestLiskov {
public static void resize(RecTangle recTangle) {
while (recTangle.getWidth() >= recTangle.getHeight()) {
recTangle.setHeight(recTangle.getHeight() + 1) ;
System.out.println("width=" + recTangle.getWidth() + "height=" + recTangle.getHeight());
}
System.out.println("压缩完成");
}
public static void main(String[] args) {
RecTangle recTangle = new RecTangle();
recTangle.setHeight(10L);
recTangle.setWidth(20L);
resize(recTangle);
Square square = new Square();
square.setLength(15l);
resize(square);
}
}
这是由于正方形其实和长方形并不是继承is-a的关系,此时如果使用四边形作为父类,就可以符合里氏替换原则了。在IDEA代码层面就会给出爆红提示
七、合成复用原则
一句话总结:更多的使用聚合组合 ,避免过多的使用继承造成继承泛滥、耦合性高难以 维护
举个例子,一个汽车具有自动档和手动档的,并且有白色、黑色、蓝色3种颜色,错误的做法就是形成3*2六个类 白色自动档汽车继承汽车类、黑色自动档汽车继承汽车类。。。。。,比如某天要对白色汽车进行限号处理,那么至少需要改两个类。而正确的做法应该是设置一个颜色类 一个功能类 使用组合 聚合的方式 来得到汽车得外观和功能
本文概述了面向对象设计中的七个基本原则:开闭原则强调扩展性,依赖倒置原则提倡抽象编程,单一职责原则保证代码清晰,接口隔离原则避免逻辑冗余,迪米特法则减少耦合,里氏替换原则支持继承的灵活性,合成复用原则提倡组合而非继承。每个原则都通过实例说明其重要性。
1616

被折叠的 条评论
为什么被折叠?



