沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 设计须知

  • UML画图

  • 权限校验

  • 设计模式

    • 设计模式基础入门
    • 设计模式七大原则
    • 单例模式
    • 工厂模式
    • 原型模式
    • 建造者模式
    • 适配器模式
    • 桥接模式
    • 装饰者模式
    • 外观模式
    • 模板方法模式
    • 常见设计模式总结
      • 谈谈你对设计模式的理解?
      • 有哪些常见的设计模式?
      • 单例模式了解么?说⼀下单例模式的使用场景。手写⼀个单例模式的实现。
      • 观察者模式了解么?说⼀下观察者模式的使⽤场景。
    • 设计模式 13 问
  • 系统设计
  • 设计模式
沉梦听雨
2023-06-13
目录

常见设计模式总结

# 常见设计模式总结

# 谈谈你对设计模式的理解?

  1. 设计模式是一种被广泛应用的解决问题的经验总结,它提供了一套可复用、可扩展、易于维护的解决方案。设计模式可以帮助我们更好地组织代码,提高代码质量和可读性。

    由以前的程序员在实际工作中反复使用,总结得出的经验,形成的使用的模式。

  2. 有 7 个常用的软件设计原则

    • 开闭原则 -- 对扩展开放,对修改关闭

      你要对某个类进行加功能的时候,直接去继承这个类写一个新的类来使用,而不是在原有类上做修改

    • 单一职责原则 -- ⼀个类只负责⼀个功能领域中的相应职责

    • 里氏替换原则 -- 所有引用基类的地方必须能透明地使用其子类的对象

    • 依赖倒置原则 -- 依赖于抽象,不能依赖于具体实现

    • 接口隔离原则 -- 类之间的依赖关系应该建立在最小的接口上

    • 合成/聚合复用原则 -- 尽量使用合成/聚合,而不是通过继承达到复用的目的

    • 最少知识原则 或者 迪米特法则 -- 一个软件实体应当尽可能少的与其他实体发生相互作用

  3. 主要有三大分类

    • 创建型模式
    • 结构型模式
    • 行为型模式

    image

# 有哪些常见的设计模式?

常见的设计模式包括 单例模式、工厂模式、观察者模式、策略模式、模板方法模式 等。

# 单例模式了解么?说⼀下单例模式的使用场景。手写⼀个单例模式的实现。

什么是单例模式?

单例模式是一种常见的(创建型)设计模式,它的作用是确保一个类只有一个实例,并提供一个全局的访问点。

在一些需要频繁创建对象的场景下,使用单例模式可以有效地减少系统的内存开销和性能损耗。

单例模式的使用场景

单例模式的使用场景包括:

  1. 当类的实例化过程比较耗时或者需要消耗较多资源时,使用单例模式可以避免重复创建实例,从而提高系统性能。
  2. 当需要一个共享访问点来管理全局变量时,使用单例模式可以确保数据的一致性和可靠性。
  3. 当希望避免多个实例之间的冲突和竞争时,使用单例模式可以有效地避免这些问题。

代码实现

下面是一个简单的单例模式的实现:

public class Singleton {
 private static Singleton instance;
 private Singleton() {}
 public static Singleton getInstance() {
     if(instance == null) {
         instance = new Singleton();
     }
     return instance;
 }
}// 只有在第一次调用getInstance()方法时才会创建实例
1
2
3
4
5
6
7
8
9
10

这是懒汉式单例模式的基本实现,在这个实现中,我们使用了一个静态变量 instance 来保存单例实例,getInstance() 方法用来获取实例。

  • 在第一次调用 getInstance() 方法时,instance 还没有初始化,会创建一个新的实例并返回,

  • 以后再次调用 getInstance() 方法时,直接返回已经创建好的实例。

  • 这样就可以保证整个系统中只有一个 Singleton 实例存在。

    饿汉式单例模式:

    public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton() {}
    public static Singleton getInstance() {
      return instance;
    }
    }
    
    1
    2
    3
    4
    5
    6
    7

    在这个实现中,我们直接在静态变量中初始化 Singleton 实例,并在 getInstance() 方法中返回该实例。因为 instance 在类加载时就已经创建好了,所以不存在线程安全问题。

    这种实现方式的缺点是,如果 Singleton 实例的初始化需要消耗较多的资源或时间,会影响系统的性能,而且如果 Singleton 实例在整个系统中没有被使用到,也会浪费系统的资源。

# 观察者模式了解么?说⼀下观察者模式的使⽤场景。

⼯⼚模式了解么?说⼀下⼯⼚模式的使⽤场景。

责任链模式了解么?

哪些开源项⽬(Netty、MyBatis)中⽤到了责任链模式?怎么⽤的?

SOL ID 原则了解么?

简单谈谈⾃⼰对于单⼀职责原则和开闭原则的理解。

阅读 Spring 源码的时候什么设计模式最让你影响深刻?能简单讲讲吗?

上次更新: 2024/11/22 17:53:04
模板方法模式
设计模式 13 问

← 模板方法模式 设计模式 13 问→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式