【85期】谈谈Java面向对象设计的六大原则,中高级面试常问!
程序员的成长之路
共 4374字,需浏览 9分钟
·
2020-11-11 04:16
阅读本文大概需要 7 分钟。
来自:blog.csdn.net/Jin_Kwok/article/details/80348936
单一职责原则——SRP
开闭原则——OCP
里式替换原则——LSP
依赖倒置原则——DIP
接口隔离原则——ISP
迪米特原则——LOD
单一职责原则
可以降低类的复杂度,一个类只负责一项职责,这样逻辑也简单很多 提高类的可读性,和系统的维护性,因为不会有其他奇怪的方法来干扰我们理解这个类的含义 当发生变化的时候,能将变化的影响降到最小,因为只会在这个类中做出修改。
开闭原则
里氏替换原则
如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有对象o1都替换成o2的时候,程序P的行为都没有发生变化,那么类型T2是类型T1的子类型。
所有引用基类的地方必须能够透明地使用其子类的对象。
子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法。
子类可以增加自己独有的方法。
当子类的方法重载父类的方法时候,方法的形参要比父类的方法的输入参数更加宽松。
当子类的方法实现父类的抽象方法时,方法的返回值要比父类更严格。
依赖倒置原则
高层模块不应该依赖底层模块,两者都应该依赖其抽象 抽象不应该依赖细节 细节应该依赖抽象
public class Hammer {
public String function(){
return "用锤子修理东西";
}
}
public class Worker {
public void fix(Hammer hammer){
System.out.println("工人" + hammer.function());
}
public static void main(String[] args) {
new Worker().fix(new Hammer());
}
}
public interface Tools {
public String function();
}
public class Worker {
public void fix(Tools tool){
System.out.println("工人" + tool.function());
}
public static void main(String[] args) {
new Worker().fix(new Hammer());
new Worker().fix(new Screwdriver());
}
}
public class Hammer implements Tools{
public String function(){
return "用锤子修理东西";
}
}
public class Screwdriver implements Tools{
@Override
public String function() {
return "用螺丝刀修理东西";
}
}
接口隔离原则
客户端不应该依赖他不需要的接口
迪米特原则
一个对象应该对其他对象保持最小的了解。
只与直接的朋友通信。首先来解释一下什么是直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖、关联、组合、聚合等。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。
总结
推荐阅读:
【84期】面试中设计模式能问些什么?比如说一下三种单例模式实现
【83期】面试被问到了Redis和MongoDB的区别?看这里就对了
微信扫描二维码,关注我的公众号
朕已阅
评论