设计模式之禅笔记-6大原则
设计模式6大原则
1.单一职责原则
定义:应该有且仅有一个原因引起类的变更
使用建议:接口一定要做到单一职责,类的设计尽量做到只有一个 原因引起变化
2.里氏替换原则
定义:所有引用基类的地方必须能透明地使用其子类的对象。
当父类方法参数类型窄于子类方法参数类型时
点击查看代码
import java.util.HashMap;
public class ParentClass {
public void print(HashMap map) {
System.out.println("父类执行");
}
}
import java.util.Map;
public class ChildClass extends ParentClass {
public void print(Map map) {
System.out.println("子类执行");
}
}
import java.util.HashMap;
public class Test3 {
public static void main(String[] args) {
ParentClass parentClass = new ParentClass();
// ParentClass parentClass = new ChildClass();
HashMap map = new HashMap();
parentClass.print(map); //执行结果:父类执行
}
}
import java.util.HashMap;
public class Test3 {
public static void main(String[] args) {
// ParentClass parentClass = new ParentClass();
ParentClass parentClass = new ChildClass();
HashMap map = new HashMap();
parentClass.print(map); //执行结果:父类执行
}
}
结论:满足里氏替换原则
当父类方法参数类型宽于子类方法参数类型时
点击查看代码
import java.util.Map;
public class ParentClass {
public void print(Map map) {
System.out.println("父类执行");
}
}
import java.util.HashMap;
public class ChildClass extends ParentClass {
public void print(HashMap map) {
System.out.println("子类执行");
}
}
import java.util.HashMap;
public class Test3 {
public static void main(String[] args) {
ParentClass parentClass = new ParentClass();
// ParentClass parentClass = new ChildClass();
HashMap map = new HashMap();
parentClass.print(map); // 父类执行
}
}
import java.util.HashMap;
public class Test3 {
public static void main(String[] args) {
// ParentClass parentClass = new ParentClass();
ParentClass parentClass = new ChildClass();
HashMap map = new HashMap();
parentClass.print(map); // 父类执行
}
}
结论:不满足里氏替换原则
因此子类中方法的前置条 件必须与超类中被覆写的方法的前置条件相同或者更宽松。
覆写或实现父类的方法时输出结果可以被缩小:重写父类方法时,返回类型可以是父类方法返回类型的子类
3.依赖倒置原则:依赖于抽象,不依赖于实现
面向接口编程
4.接口隔离原则
接口尽量细化,同时接口中的方法尽量少。
5.迪米特法则
核心观念就是类间解耦,弱耦合。一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调 用的类)的内部是如何复杂都和我没关系,那是你的事情,我就知道你提供的这么多public 方法,我就调用这么多,其他的我一概不关心。
6.开闭原则
对扩展开放,对修改关闭;一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律