设计模式前篇

一、设计模式从何而来

设计模式起源于建筑领域,是前人总结的一种在特定环境下行之有效的解决方案

二、设计模式是什么

设计模式是一套被反复验证过的代码设计经验总结,使用设计模式能让我更好的理解并提升代码的可读性和简化性

三、都有哪些设计模式

四、学习设计模式都需要那些前置知识

图形往往更容易被人所理解,因为图形的信息比文字更加直白和易懂,文字往往需要人去联想和思考,同时,图形也更容易被记忆。

UML类图

类(class)

类封装了属性和行为,是举行相同属性和行为的对象集合的总称。

类一般由如下组成:

  • 类名: 类的名称。
  • 类的属性: 类的属性一般包含public、private、protected三类,用符号"+"、"-"、"#"表示。 语法: 可见性 属性名称:属性类型[=属性默认值]
  • 类的行为: 类的行为也就是类中包含的方法,语法:可见性 方法名([参数列表]):[返回值类型] 如果无参数就()即可,无返回值直接void即可。

类之间的关系

关联关系

关联关系是最常见的关系,一般表示一类对象和另外一类对象之间的联系,例如:班级和学生,公司和员工等。

java 复制代码
public class Members{
    private Account account;//成员变量
}
public class Account{
    private String accountNo;
    private String accountName;
}
继承关系

继承关系表示的是父子关系。

java 复制代码
public class Animal{
    private String name;
    private String type;
}
public class Pig extends Animal{
    private String hair;
}
public class Dog extends Animal{
    private String hair;
}
接口和实现关系
java 复制代码
public interface Worker{
    void doWork();
}
public class Doctor implements Worker{
    private String name;
    @Override
    public void doWork() {
        System.out.println("docker is working");
    }
}
public class Police implements Worker{
    private String name;
    @Override
    public void doWork() {
        System.out.println("Police is working");
    }
}

面向对象设计原则

单一职责原则

一个类只负责一个领域中的相应的职责。

单一职责原则是实现高内聚、低耦合的体现,看起来很简单但也很复杂,主要复杂在如何定义一个类的单一责任。

开闭原则

一个类或者一个接口应该对扩展开放,对修改关闭,保证尽量在不修改的原有代码的情况下,实现功能的扩展。

一个系统随着不断的版本迭代,需求的增加,应该尽量保证框架的稳定性,符合开闭原则的框架应该非常方便的支持扩展,只有这样才能保证软件的稳定性和可维护性。

里氏替换原则

所有使用到父类的地方,必须能透明的使用其子类对象。

软件中,父类替换成子类不应该产生错误,但是反之,子类替换成父类则不一定;例如:喜欢小动物,那我一定喜欢小狗,但是你不能说我喜欢小狗我就一定喜欢所有动物,因为我不喜欢蛇。 里氏替换原则应该将父类采用抽象类或者接口的形式来保证,子类实现父类的接口,程序运行时,子类实例替换父类实例,可以方便的扩展系统功能,如果需要增加新的功能只需要添加新的子类来实现父类的方法即可。

依赖倒置原则

抽象不应该依赖于细节而是细节依赖于抽象,就是要针对接口编程。

面向接口编程的意思是,尽量使用接口或者抽象类来进行属性的定义,方法的声明,一个具体的子类应该只有父类或者接口的抽象方法的实现,而不一应该在由别的方法,否则父类就无法调用子类的其他方法。

接口隔离原则

具体的业务不应该依赖那些它不需要的接口,接口的功能应该单一化,而不是报所有的功能都放在一个接口里面,如果功能都放在一个接口里面,具体的业务也许只是需要其中一个功能而被迫取实现所有的功能,是一种资源的浪费

组合复用原则

实际的业务应该尽量使用组合关系而不是继承关系来达到复用的结果

一般来说,如果两个对象之间是"has-a"的关系,应该需要使用组合的关系,如果是"is-a"的关系应该考虑使用继承来实现。

迪米特原则

一个模块应该尽可能的减少和其他模块的关联。 一个模块的修改应该尽量减少对别的模块的影响,这样就更便于扩展和维护

相关推荐
戴西软件1 小时前
戴西软件入选2026年安徽省制造业数智化转型服务商名单
java·大数据·服务器·前端·人工智能
薛定猫AI2 小时前
【深度解析】从 Antigravity 更新看 Agent IDE 的工程化演进:权限、沙盒、MCP 与模型治理
前端·javascript·ide
漂流瓶jz8 小时前
总结CSS组件化演进之路:命名规范/CSS Modules/CSS in JS/原子化CSS
前端·javascript·css
踩着两条虫9 小时前
「AI + 低代码」的可视化设计器
开发语言·前端·低代码·设计模式·架构
Jagger_9 小时前
项目上线忙碌结束之后,为什么总想找点事做?
前端
GalenZhang88810 小时前
OpenClaw 配置多个飞书账号实战指南
前端·chrome·飞书·openclaw
萌新小码农‍11 小时前
python装饰器
开发语言·前端·python
Wilber的技术分享11 小时前
【大模型面试八股 3】大模型微调技术:LoRA、QLoRA等
人工智能·深度学习·面试·lora·peft·qlora·大模型微调
threelab11 小时前
Three.js 初中数学函数可视化 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器
爱学习的程序媛11 小时前
浏览器工作原理全景解析
前端·浏览器·web