Java面试必知:软件设计的七大原则
软件设计的七大原则
-
单一职责原则
【定义】一个类应该只有一个职责,只完成一个功能
【解释】MVC三层结构中,Controller专门负责接收数据,分配执行流程
Service专门负责实现业务逻辑
DAO专门负责数据的CRUD操作 -
开闭原则
【定义】 一个类应该对扩展开放,对修改关闭
【解释】针对接口编程,面对新的需求变化,应该尽量少改已存在的老代码,只增加新的代码 -
依赖倒置原则
【定义】高层模块不应该依赖低层模块,二者都应该依赖其抽象
抽象不应该依赖细节,细节应该依赖抽象
【解释】类应该依赖于抽象类或接口,不要依赖具体类,通过父类引用指向子类对象实现多态性
Don’t call me, I will call you -
合成复用原则
【定义】优先使用组合(has a的关系),尽量不使用继承(is a的关系)
【解释】继承的耦合性太高, 如果非要使用继承,子类也应该继承抽象类,而不应该继承具体类 -
迪米特原则
【定义】一个对象应当对其他对象有尽可能少的了解,只和直接朋友交谈,不要和陌生人说话
【解释】封装具体实现细节,外界只关心使用接口,无需关心内部实现,尽量降低类间的耦合
只和直接朋友交谈—类之间只要有耦合(依赖、关联、聚合、组合),就称为朋友关系。类的成员变量、方法的参数和返回值是类的直接朋友,而方法的局部变量不是类的直接朋友。
不要和陌生人说话—一个类对自己所依赖的类的细节,知道得越少越好。无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,并对外提供公有方法,不对外泄露实现细节。
-
里氏替换原则
【定义】所有能使用父类的地方,都能透明地替换为子类
【解释】子类可以扩展父类的功能,但不能改变父类原有的功能,尽量不要重写父类的方法 -
接口隔离原则
【定义】一个类实现的接口应该是最小接口,客户端不需要的方法不应该出现在接口定义中
【总结】软件设计原则的核心思想就是针对接口编程,找出变化的部分独立抽取出来,使变化的部分和不变的部分之间解耦
本文地址:https://blog.csdn.net/weixin_41774732/article/details/107360337