Java视频学习笔记-19-设计模式

2023-11-07

面向对象思想设计原则

  • 单一职责原则(即高内聚低耦合)
    每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个,功能细化(在设计模式中,所有的设计模式都遵循这一原则)
  • 开闭原则
    对类的改动是通过增加代码进行的,而不是修改现有代码
    要保证这点就需要借助于抽象和多态,把可能变化的内容抽象出来,从而使抽象的部分是相对稳定的,而具体的实现则是可以改变和扩展的
  • 里氏替换原则
    在任何父类出现的地方都可以用它的子类来替代(同一个继承体系中的对象应该有共同的行为特征)
  • 依赖注入原则
    依赖于抽象类或者接口编程,不依赖于具体实现编程
  • 接口分离原则
    一个接口不需要提供太多的行为,一个接口应该只提供一种对外的功能,不应把所有的操作都封装到一个接口里
  • 迪米特原则
    一个对象对其他对象尽可能少的了解,降低各个对象之间的耦合,提高系统的可维护性,在模块之间只通过接口编程,而不理会模块的内部工作原理

单例设计模式

单例设计模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供

  • 优点
    在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式可以提高系统的性能
  • 缺点
    没有抽象层,因此扩展很难;职责过重,在一定程序上违背了单一职责

保证类在内存中只有一个对象的方法:

  1. 把构造方法私有
  2. 在成员位置自己创建一个对象
  3. 通过一个公共的方法提供访问

单例设计模式分为饿汉式和懒汉式

饿汉式(类一加载就创建对象)

public class Student {
	//构造私有
	private Student() {
	}
	
	//创建对象
	private static Student s = new Student();
	
	//提供公共方法访问
	public static Student getStudent() {
		return s;
	}
}

懒汉式(使用时才创建对象)

public class Student {
	//构造私有
	private Student() {
	}
	
	//创建对象
	private static Student s = null;
	
	//提供公共方法访问
    //因为其线程安全性问题,所以需加同步
	public synchronized static Student getStudent() {
		if(s == null) {
			s = new Student();
		}
		return s;
	}
}

开发的话一般用饿汉式,因为其基本不会出问题
懒汉式:懒加载(延迟加载);线程安全问题(满足线程安全性的三个条件)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java视频学习笔记-19-设计模式 的相关文章

随机推荐

  • Restful风格

    文章目录 前言 一 Restful风格是什么 二 Restful风格里面的请求方式 1 Get 2 POST 3 PUT 4 DELETE 这四个在项目接口中分别代表的是查 增 改 删 三 Restful风格的Controller如何实现
  • django静态文件无法访问解决方案

    nginx配置如下 For more information on configuration see Official English Documentation http nginx org en docs Official Russi
  • 开发日记2021-17、20周

    2021 4 19 温习了下观察者模式 学习了状态模式 但是感觉状态模式不是太能把握透彻 代码结构不太一样 理解起来有些偏差 写着写着就陷入到了沉思中 总会忘记要把想法记下来 这里就是草稿就是思路演练场 这里写下的东西不需要完美 只要记录下
  • 【Clion+CubeMX开发STM32】(二)创建自己的工程

    目录 新建工程 修改芯片型号 添加自己的文件 将自己的文件添加Cmake项目 修改CMakeLists template txt 烧录程序 编写 cfg文件 编写 cfg文件 新建工程 打开你的Clion 点击新建工程 在左侧找到STM32
  • 期货开户寻找交易确定性

    1 寻找确定性 都说金融是概率游戏 大家都是说胜率有多少 没有谁敢说行情能100 确定 但傅海棠却提出 在特定情况下 能找到100 确定的行情 他的这个观点也一度引起了广泛的争议 傅海棠说 物极必反 必 是100 不是概率 关键是找到那个
  • Unity3D之sprite动画(Animation)的制作

    实例说明 忍者跑酷的player动画制作 这些都是用Sprite做的动画 在prioject面板里的一组sprite里面点击 之后看属性面板的Sprite Editor对这组Sprite进行编辑 下面先编辑一个idle状态的动画 首先选择第
  • 贝叶斯推断及其互联网应用(一)

    贝叶斯推断及其互联网应用 一 投递人 itwriter 发布于 2011 08 25 14 03 评论 6 有1981人阅读 原文链接 收藏 一年前的这个时候 我正在翻译Paul Graham的 黑客与画家 那本书大部分谈的是技术哲学 但是
  • 二、水平管道中CO2气液两相的流量研究

    水平管道中CO2气液两相的流量研究 3 1 引言 在CCS系统的CO2管道运输过程中 由于传输距离较长且受到管道周围环境的影响 管道中的CO2不可避免的会发生相态的改变 产生气液两相CO2流 因此 本研究基于多传感器系统的测量方法 对水平管
  • android hwcomposer 抓取各个显示图层的raw显示数据

    amlogic 平台 void fill color void vaddr int cnt unsigned int p data p data unsigned int vaddr for int i 0x00 i lt 256 1920
  • 服务器---session理论知识

    1 session理论知识 1 1 session何时创建 1 2 session何时销毁 1 session何时创建 Session 机制 session机制是一种服务器端的机制 用来在无状态的HTTP协议下越过多个请求页面来维持状态和识
  • Mac上Pycharm中安装anaconda的pandas和numpy的方法

    1 点击PyCharm菜单栏下的Preferences 2 选择需要安装的project中的Project Interpreter选项 3 选择一个python版本 如红框1 下面会列出已经安装了的Package 这时点击红框2的anaco
  • 【Mac】Mac下SSH免密登录localhost

    1 背景 问题起因参考 mac下ssh 报错 localhost ssh connect to host localhost port 22 Connection refused 为了在MAC上搭建Hadoop standalone 需要配
  • gtx1050ti最稳定的驱动_更新PC电脑的蓝牙驱动方法

    有时候我们需要更新自己的电脑蓝牙版本使我们在特定环境下更好的使用 下面就来讲讲怎么更新蓝牙版本 一 首先我们要查看自己电脑的蓝牙版本 1 右键点击左下方的开始菜单 找到设备管理器 M 2 点开设备管理器 找到蓝牙并右键属性 并查看驱动程序
  • Vue3 中的 @Options,是做什么的?

    Vue3 中的 Options 是做什么的 Options 是个啥 为什么我的项目中会有 Options 或 Component 啥是 类语法风格的组件 Class Style Component Vue Class Component 更
  • 【Hello mysql】 mysql的复合查询 (重点)

    Mysql专栏 Mysql 本篇博客简介 介绍mysql的复合查询 mysql的复合查询 基本查询回顾 查询工资高于500或岗位为MANAGER的雇员 同时还要满足他们的姓名首字母为大写的J 按照部门号升序而雇员的工资降序排序 使用年薪进行
  • MFC之底层窗口实现01(包括windows窗口消息机制)

    1 MFC需要了解的相关概念 1 SDK和API SDK 软件开发工具包 Software Development Kit 一般都是一些被软件工程师用于为特定的软件包 软件框架 硬件平台 操作系统等建立应用软件的开发工具的集合 也称第三方工
  • 【嵌入式学习-C语言篇】 while & for 的使用

    while for 的使用 while for 的常用场景 自动售货机 判断是否存在待处理订单 智能音箱 打印当前搜索到的wifi热点信息 自动售货机 计算当前所有订单的金额 有收入有退款 代码 include
  • Android解析含有键值是汉字的json串

    Android解析含有键值是汉字的json串 今天在接入百度orc识别身份证的功能时 请求成功后 百度返回的json中发现有的键值是中文 我之前没有遇到过这种情况 依然用在之前项目封装的fastjson正常解析json串 结果解析失败 刚开
  • 性能测试二八原则,响应时间2/5/8原则

    性能测试二八原则 响应时间2 5 8原则 所谓响应时间的 2 5 8原则 简单说 就是 当用户能够在2秒以内得到响应时 会感觉系统的响应很快 当用户在2 5秒之间得到响应时 会感觉系统的响应速度还可以 当用户在5 8秒以内得到响应时 会感觉
  • Java视频学习笔记-19-设计模式

    面向对象思想设计原则 单一职责原则 即高内聚低耦合 每个类应该只有一个职责 对外只能提供一种功能 而引起类变化的原因应该只有一个 功能细化 在设计模式中 所有的设计模式都遵循这一原则 开闭原则 对类的改动是通过增加代码进行的 而不是修改现有