当前位置: 首页 > news >正文

《大话设计模式》(持续更新中)

《大话设计模式》

  • 序 为什么要学设计模式
  • 第0章 面向对象基础
    • 什么是对象?
    • 什么是类?
    • 什么是构造方法?
    • 什么是重载?
    • 属性与字段有什么区别?
    • 什么是封装?
    • 什么是继承?
    • 什么是多态?
    • 抽象类的目的和特点是什么?
    • 什么是接口?
    • 抽象类与接口的区别?
    • 什么是 ArrayList,它的优缺点是什么?
    • 什么是泛型?
  • 第1章 简单工厂模式
    • 封装思想的实现?
    • 继承思想的实现?
    • 简单工厂模式(多态思想)的实现?
    • UML类图的六种箭头?
  • 第2章 策略模式
  • 持续更新中...

序 为什么要学设计模式

重要的不是你将来会不会用到这些模式,而是通过这些模式让你找到“封装变化”、“对象间松散耦合”、“针对接口编程的感觉”,从而设计出易维护、易拓展、易复用、灵活性好的程序。

第0章 面向对象基础

什么是对象?

一切事物皆为对象。对象就是可以看到、感觉到、听到、触摸到、尝到或闻到的东西。准确地说,对象是一个自包含的实体,用一组可识别的特性和行为来标识。

什么是类?

类就是具有相同的属性和功能的对象的抽象的集合。

什么是构造方法?

又叫构造函数,其实就是对类进行初始化。构造方法与类同名,无返回值,不需要 void,在 new 的时候被调用。

什么是重载?

重载可在不改变原方法的基础上,新增功能。要求方法名相同,参数类型或个数不同。

属性与字段有什么区别?

属性是一个或一对方法,即属性适合于以字段的方式使用方法调用的场合;

字段是存储类要满足其设计所需要的数据,字段是与类相关的变量;

如:shoutNum 是私有的字段,对应地,ShoutNum 是共有的对外属性。

什么是封装?

假设我们的房子是一个类的实例,室内的装饰只能供住户看到,外人无法透过墙看到内部的细节;但与此同时,房子会安置门窗,相当于对外提供接口,可以访问内部的数据。

每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装。它的好处有:

  1. 解耦

把属于一个类的信息提取出来。就好比居委会的公共电视放在你家,别人家都没有,邻居都来你家看电视。你肯定不想这样,我们就应该把公共电视放在居委会。

  1. 类的内部实现可以自由修改

  2. 类具有清晰的对外接口

什么是继承?

继承定义了类如何相互关联,共享特性。“is a” 的关系,继承的特点:

  1. 子类拥有父类非 private 的属性和功能;
  2. 子类拥有自己的属性和功能,即可以拓展;
  3. 子类可以以自己的方法实现父类的功能(方法重写)

什么是多态?

多态表示不同的对象可以执行相同的动作,但通过自己的实现代码来执行。特点:

  1. 子类以父类的身份出现;

    Animal cat = new Cat();

  2. 子类在工作时以自己的方式实现;

  3. 子类以父类的身份出现时,子类特有的属性和方法不能使用。

(还是没悟)

抽象类的目的和特点是什么?

抽象类应该拥有尽可能多的共同代码,拥有尽可能少的数据。

  • 抽象类不能被实例化
  • 抽象方法是必须被子类重写的方法
  • 如果类中包含抽象方法,那么类就必须定义为抽象类

什么是接口?

接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。

  • 不能实例化
  • 没有构造方法
  • 没有字段
  • 没有修饰符
  • 不能声明为虚拟或静态
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

抽象类与接口的区别?

  • 抽象类是对类(整体)的抽象,接口是对行为(局部)的抽象
  • 抽象类是自底向上抽象出来的,接口是自顶向下设计出来的

什么是 ArrayList,它的优缺点是什么?

ArrayList 是包 java.util.ArrayList 下的一部分,使用大小可按需动态增加的数组实现 Collection 接口。

优点:

  • 大小按需动态增加,初始为 0
  • 随意添加或移除某一范围元素

缺点:

  • ArrayList 类型不安全,在它眼中所有元素都是 Object,对于不同类型的元素,编译时没问题,运行时报错
  • 对于任意类型,都需要装箱拆箱,造成性能损耗

装箱

int i = 123;
Object o = (Object)i;

拆箱

o = 123;
int i = (int)o;

什么是泛型?

泛型是具有占位符(类型参数)的类、结构、接口和方法。用法是在 ArrayList 后面加上"",二者在功能上是一样的,不同点在于泛型在声明和实例化时都需要指定其内部项的数据或对象类型。这就避免了上面提到的安全问题和性能损耗。

第1章 简单工厂模式

这是一个逐步优化的过程

在这里插入图片描述

封装思想的实现?

业务逻辑与界面逻辑分开,降低耦合

在这里插入图片描述

继承思想的实现?

修改任一算法,不需要提供其他算法的代码

在这里插入图片描述

简单工厂模式(多态思想)的实现?

明确工厂要实例化的对象

在这里插入图片描述

UML类图的六种箭头?

在这里插入图片描述

依赖:动物 依赖 氧气

abstract class Animal {public metabolism(Oxygen oxygen) { // 新陈代谢}
}

关联:企鹅 关联 气候

含义:“了解”,企鹅了解气候

class Penguin {private Climate climate;
}

泛化:鸟 泛化 动物

class Brid extends Animal {}

实现:大雁 实现 飞翔

class WideGoose implements IFly {}

聚合:雁群 聚合 大雁

含义:弱的“has a”,雁群包含大雁,但大雁不是雁群的一部分(理解不了?看下面的组合就明白了!)

与图中箭头方向相反,即空心菱形在雁群一侧

class WideGooseAggregate {private WideGoose[] arrayWideGoose;
}

组合:鸟 组合 翅膀

含义:强的“has a”

class Bird {private Wing wing;public Bird() {// Bird初始化时,Wing同时生成wing = new Wing();}
}

第2章 策略模式

持续更新中…

相关文章:

《大话设计模式》(持续更新中)

《大话设计模式》 序 为什么要学设计模式第0章 面向对象基础什么是对象?什么是类?什么是构造方法?什么是重载?属性与字段有什么区别?什么是封装?什么是继承?什么是多态?抽象类的目的…...

人工智能原理复习--绪论

文章目录 人工智能原理概述图灵测试人工智能的研究方法符号主义连接主义行为主义总结 人工智能原理概述 人工智能是计算机科学基础理论研究的重要组成部分 现代人工智能一般认为起源于美国1956你那夏季的达特茅斯会议,在这次会议上,John McCarthy第一次…...

[网络] 字节一面~ 2. HTTP 2 与 HTTP 1.x 有什么区别

头部压缩 在 HTTP2 当中,如果你发出了多个请求,并且它们的头部(header)是相同的,那么 HTTP2 协议会帮你消除同样的部分。(其实就是在客户端和服务端维护一张索引表来实现)二进制格式 HTTP1.1 采用明文的形式 HTTP/2 全⾯采⽤了⼆进制格式&…...

自己动手实现一个深度学习算法——八、深度学习

深度学习是加深了层的深度神经网络。 1.加深网络 1)向更深的网络出发 创建一个如下图所示的网络结构的CNN 这个网络的层比之前实现的网络都更深。这里使用的卷积层全都是33 的小型滤波器,特点是随着层的加深,通道数变大(卷积…...

js闭包的必要条件及创建和消失(生命周期)

>创建闭包的必要条件: 1.函数嵌套 2.内部函数引用外部函数的变量 3.将内部函数作为返回值返回 >闭包是什么? 就是可以访问外部函数(作用域)中变量的内部函数 > 闭包是什么时候产生的? - 当调用外部函数…...

鸿蒙开发-ArkTS 语言-基础语法

[写在前面: 文章多处用到gif动图,如未自动播放,请点击图片] 1. 初识 ArkTS 语言 ArkTS 是 HarmonyOS 优选主力开发语言。ArkTS 是基于 TypeScript (TS) 扩展的一门语言,继承了 TS 的所有特性,是TS的超集。 主要是扩展了以下几个方…...

GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHF

GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHF 文章目录 GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHFPretraining 预训练阶段Supervised FineTuning (SFT&#x…...

电子学会C/C++编程等级考试2022年03月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:和数 给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。 时间限制:10000 内存限制:65536输入 共两行,第一行是数列中数的个数…...

理解 JUnit, JaCoCo 到 SonarQube 的过程及 Maven 配置

Java 项目需要产生单元测试及代码覆盖率的话一直都是走的 JUnit 单元测试,JaCoCo 基于测试产生测试覆盖率,然后送到 SonarQube 去展示这条路子。当然 SonarQube 还可以帮我们进行代码的静态分析。但对其中的具体使用及过程知晓的并不深,基本就…...

人工智能关键技术决定机器人产业的前途

人工智能(Artificial Intelligence,AI)是指让计算机或机器具有类似于人类的智能和学习能力的技术。人工智能技术与机器人技术的结合将改变传统的机器人行业格局,就像智能手机对传统手机的颠覆一样。本文从人工智能技术的发展趋势、…...

2023华为ICT网络初赛试题回顾

所有题目都只能用来学习交流,禁止用于非法不公平的使用,如有侵权,该文章立刻删除。 1、某机房没有合适长度的网线,现需手工制作一个568B标准的双纹线,那么应按照以下哪一线序进行制作? A.绿白,绿,蓝&#…...

Hands-on Machine Learning with Scikit-Learn,Keras TensorFlow

读书记录(缓慢更新) 目录 Part 1. The Fundamentals of Machine Learning The Content of The Machine Learning Landscape The Machine Learning Landscape Part 1. The Fundamentals of Machine Learning The Content of The Machine Learning Landscape Part 1. The F…...

242. 有效的字母异位词

这篇文章会收录到 :算法通关村第十二关-白银挑战字符串经典题目-CSDN博客 242. 有效的字母异位词 描述 : 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t …...

TUP通信——与多个客户端同时通信

一,概括:可以通过多线程思想每加一个客户端由线程池中的主线程交给一个子线程管理 二,案例 (1),线程池 (2),服务端 (3),客户端...

基于helm的方式在k8s集群中部署gitlab - 备份恢复(二)

接上一篇 基于helm的方式在k8s集群中部署gitlab - 部署(一),本篇重点介绍在k8s集群中备份gitlab的数据,并在虚拟机上部署相同版本的gitlab,然后将备份的数据进行还原恢复 文章目录 1. 备份2. 恢复到虚拟机上的gitlab2.…...

B树与B+树的对比

B树: m阶B树的核心特性: 树中每个节点至多有m棵子树,即至多含有m-1个关键字根节点的子树数属于[2, m],关键字数属于[1, m-1],其他节点的子树数属于 [ ⌈ m 2 ⌉ , m ] [\lceil \frac{m}{2}\rceil, m] [⌈2m​⌉,m]&am…...

关键路径-STL版/拓扑排序 关键路径【数据结构】

关键路径-STL版 题目描述 给定有向图无环的边信息,求每个顶点的最早开始时间、最迟开始时间。 输入 第一行图的顶点总数 第二行边的总数 第三行开始,每条边的时间长度,格式为源结点 目的结点 长度 输出 第一行:第个顶点的最早…...

最新AI创作系统ChatGPT系统运营源码,支持GPT-4图片对话能力,上传图片并识图理解对话,支持DALL-E3文生图

一、AI创作系统 SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!本系统使用NestjsVueTypescript框架技术,持续集成AI能力到本系统。支持OpenAI DALL-E3文生图,…...

小航助学题库蓝桥杯题库stem选拔赛(21年3月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSD…...

[python]离线加载fetch_20newsgroups数据集

首先手动下载这个数据包 http://qwone.com/~jason/20Newsgroups/20news-bydate.tar.gz 下载这个文件后和脚本放一起就行,然后 打开twenty_newsgroups.py文件(在fetch_20newsgroups函数名上,右键转到定义即可找到) 之后运行代码即…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系&#xff0c;可直观判断线性相关、非线性相关或无相关关系&#xff0c;点的分布密…...