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

《大话设计模式》

  • 序 为什么要学设计模式
  • 第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章 策略模式

持续更新中…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/171396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字符串原地旋转

记录一下做的练习题 字符串原地旋转:五 三 mat [[1,2,3],[3,4,5],[4,5,6]] tag0 total 0 for i in mat:total total i[tag]tag 1 print(total) 四 X [[12,7,3],[4,5,6],[7,8,9]] Y [[5,8,1],[6,7,3],[4,5,9]] res [[0,0,0],[0,0,0],[0,0,0]] for i in rang…

如何快速搭建一个大模型?简单的UI实现

🔥博客主页:真的睡不醒 🚀系列专栏:深度学习环境搭建、环境配置问题解决、自然语言处理、语音信号处理、项目开发 💘每日语录:相信自己,一路风景一路歌,人生之美,正在于…

makefile编写练习

makefile编写练习 OVERVIEW makefile编写练习文件结构直接编译整个项目并运行将项目制作成为静态库将项目制作成为动态库 编写makefile文件来编译带头文件的程序, 文件结构 初始项目文件结构,如下所示: #ifndef ADD_HPP #define ADD_HPPint…

乘波前行的问题

1.问题: 考虑两个信号叠加在一起,比如,一个是工频信号50Hz,一个是叠加的高频信号比如有3KHz,简单起见,两个信号都是幅值固定的标准的正弦波,现在我们期望得到那个高频信号,相对工频…

Royal TSX v6.0.1

Royal TSX是一款基于插件的软件,适用于Windows系统,可以用于远程连接和管理服务器。它支持多种连接类型,如RDP、VNC、基于SSH连接的终端,SFTP/FTP/SCP或基于Web的连接管理。 在安装Royal TSX后,需要进行一些基础配置&…

2023人形机器人行业海外科技研究:从谷歌看机器人大模型进展

今天分享的是人形机器人系列深度研究报告:《2023人形机器人行业海外科技研究:从谷歌看机器人大模型进展》。 (报告出品方:华鑫证券) 报告共计:26页 大模型是人形机器人的必备要素 长期来看,人…

openEuler 22.03 LTS x86_64 cephadm 部署ceph 16.2.14 未完成 笔记

环境 准备三台虚拟机 10.47.76.94 node-1 10.47.76.95 node-2 10.47.76.96 node-3 下载cephadm [rootnode-1 ~]# yum install cephadm Last metadata expiration check: 0:11:31 ago on Tue 21 Nov 2023 10:00:20 AM CST. Dependencies resolved. Package …

数据结构(超详细讲解!!)第二十五节 线索二叉树

1.线索二叉树的定义和结构 问题的提出: 通过遍历二叉树可得到结点的一个线性序列,在线性序列中,很容易求得某个结点的直接前驱和后继。但是在二叉树上只能找到结点的左孩子、右孩子,结点的前驱和后继只有在遍历过程中才能得到…

Alfred v5.1.4(mac快速启动)

Mac效率办公软件哪个好?Alfred是一款Mac电脑上的快速启动和工作流自动化工具,它可以帮助用户快速访问文件、应用程序、web搜索和系统工具,提高工作效率。以下是Alfred的特点: 快速启动:用户可以通过Alfred快速启动应用…

Node.js入门指南(四)

目录 express框架 express介绍 express使用 express路由 express 响应设置 中间件 路由模块化 EJS 模板引擎 express-generator hello,大家好!上一篇文章我们介绍了Node.js的模块化以及包管理工具等知识,这篇文章主要给大家分享Nod…

车载通信架构 —— 传统车内通信网络MOST总线(光纤传输、专精多媒体)

车载通信架构 —— 传统车内通信网络MOST总线(光纤传输、专精多媒体) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都…

(2023码蹄杯)省赛(初赛)第三场真题(原题)(题解+AC代码)

题目1&#xff1a;MC0227堆煤球 码题集OJ-堆煤球 (matiji.net) 思路&#xff1a; 1.i从l枚举到r,i是8的倍数就跳过&#xff0c;i不是8的倍数就用等差数列求和公式i(1i)/2,最后累加到答案中即可 AC_Code:C #include<bits/stdc.h> using namespace std;int main( ) {in…

轻松实现文件按数量平均分类,高效整理并自动新建文件夹保存“

你是否曾经因为文件数量过多&#xff0c;整理起来繁琐而感到烦恼&#xff1f;是否曾经为了新建文件夹而手动一个一个进行创建&#xff0c;费时又费力&#xff1f;现在&#xff0c;我们的智能文件管理工具将为你解决这些问题&#xff01; 首先第一步&#xff0c;我们要进入文件…

【开源】基于Vue.js的网上药店系统

项目编号&#xff1a; S 062 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S062&#xff0c;文末获取源码。} 项目编号&#xff1a;S062&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 药品类型模块2.3 药…

聊一聊索引覆盖的好处

问&#xff1a;索引覆盖啥意思&#xff1f; 答&#xff1a;若查询的字段在二级索引的叶子节点中&#xff0c;则可直接返回结果&#xff0c;无需回表。这种通过组合索引避免回表的优化技术也称为索引覆盖&#xff08;Covering Index&#xff09;。在叶子节点中的包括索引字段和主…

DataGrip 2023.2.3(IDE数据库开发)

DataGrip是一款数据库集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于数据库管理和开发。 DataGrip提供了许多强大的功能&#xff0c;如SQL语句编辑、数据库连接管理、数据导入和导出、数据库比较和同步等等。它支持多种数据库&#xff0c;如MySQL、PostgreSQL、Ora…

Unity技美35——再URP管线环境下,配置post后期效果插件(post processing)

前两年在我的unity文章第10篇写过&#xff0c;后效滤镜的使用&#xff0c;那时候大部分项目用的还是unity的基础管线&#xff0c;stander管线。 但是现在随着unity的发展&#xff0c;大部分项目都用了URO管线&#xff0c;甚至很多PC端用的都是高效果的HDRP管线&#xff0c;这就…

位图及有关海量数据处理

bitset 1.给40亿个不重复的无符号整数&#xff0c;没排过序&#xff0c;给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个中 ①.如果用排序加二分查找&#xff0c;40亿个数需要16g内存&#xff0c;内存开不出这么大连续空间 ②.每个值映射一个比特位&#xff0c;…

基于Haclon的图形镜像案例

项目要求&#xff1a; 图为HALCON的例图“green-dot”&#xff0c;请将其中的圆形图案按水平和垂直两个方向分别进行镜像。 项目知识&#xff1a; 首先要用BLOB分析的方法&#xff0c;得到圆形图案的目标区域&#xff0c;再对其进行镜像。 在HALCON中与镜像相关的算子为mirr…

基于Eclipse+Swing+MySQL开发的借贷平台

基于Swing的借贷平台 项目介绍&#x1f481;&#x1f3fb; 本项目是一个基于Java JDBC的银行管理系统。开发环境为MyEclipse2014&#xff0c;数据库使用MySQL V5.5&#xff0c;操作系统为Windows 7 64位。 主要功能包括用户开户、存款、取款、转账、查询余额、修改密码和销户等…