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

《大话设计模式》

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

持续更新中…

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解数据结构:链表

文章目录 🌰导语🌰链表的定义及基本结构🌰单链表🥕单链表特点 🌰双向链表🥕双链表特点 🌰循环链表🥕循环链表特点 🌰链表的操作🍆链表的插入🫘链头…

文件批量改名方法:文件自动批量重命名,提升文件管理效率

在日常工作中随着工作时间的推移,在文件数量日益增长的情况下,会在电脑中积累大量的文件。如果文件名混乱无序,查找和识别重要文件将变得非常困难。这不仅会浪费大量的时间和精力,还可能导致重要文件的丢失或混乱。文件批量改名可…

Java的内部类

文章目录 静态内部类(被static修饰的成员内部类)--可以实例化!获取静态内部类对象(把它当成外部类的成员)静态内部类可以声明普通成员变量和方法,而普通内部类不能声明static成员变量和方法静态内部类跟静态方法一样,只能访问静态的成员变量和方法&#…

【计算机网络笔记】多路访问控制(MAC)协议——随机访问MAC协议

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

[环境配置]vscode免密ssh的设置流程

测试环境: windows 11 ubuntu16.04 vmware 第一步:生成密钥 cmd打开输入:ssh-keygen -t rsa 一路回车后可以在C:\Users\用户名\.ssh路径看到id_rsa.pub,我们打开这个文件,用记事本打开即可,然后复制里…

代码随想录算法训练营第四十六天【动态规划part08】 | 139.单词拆分、背包总结

139.单词拆分 题目链接: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 求解思路: 单词是物品,字符串s是背包,单词能否组成字符串s,就是问物品能不能把背包装满。 动规五部曲 确定dp数…

VCenter6.7 Web访问提示503 Service Unavailable

PS:本文分享VMware Vcenter在web登录的时候报错:503 Service Unavailable,对于6.7.x版本比较适用,其他版本需自行测试。 简单来讲就是需要重启一下vsphre-client服务,如重启该服务仍无法解决,可以尝试重启一…

从0开始学习JavaScript--JavaScript函数返回值

在JavaScript中,函数是一种强大的工具,不仅能够执行一系列操作,还可以返回值。理解函数返回值的概念对于编写清晰、灵活的代码至关重要。本文将深入探讨JavaScript函数返回值的各种方面,包括基本返回值、多返回值、异步函数的返回…

MySQL MHA高可用架构搭建

快捷查看指令 ctrlf 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改) MySQL MHA高可用架构搭建 MHA(Master HA)是一款开源的 MySQL 的高可用程序&#xf…

电磁场信息论及先进MIMO (黄大年茶思屋座谈) 笔记

天线阵的负载动态调控,动态阻抗匹配网络,实时跟着扫描角度的变化而变化,可能突破Hannan极限。 新的天线构架: 周期 —》非周期 每个单元不一样 动态可调,可重构 每个天线多端口或多模式 多层天线 非周期结构天线的增…

#define例题

我们已经学了#define的所有知识,让我们来看这道题,可不要又陷入陷阱 题目要求: #define N 4 #define Y(n) ((N2)*n) int main() {int z 2 * (N Y(5 1));printf("z%d\n", z);return 0; } 求这个z的值是多少? 我们直接…

YOLOv8 训练自己的分割数据集

之前写过一篇 使用YOLOv8训练自己的【目标检测】数据集-【收集数据集】-【标注数据集】-【划分数据集】-【配置训练环境】-【训练模型】-【评估模型】-【导出模型】,里面带大家整个流程走过一遍了, 这篇文章我们来介绍如何使用 YOLOv8 训练分割数据集&a…

旋转框检测项目相关python库知识总结(mmrotate、ppyolo_r、yolov5_obb)

旋转框常用于检测带有角度信息的矩形框,即矩形框的宽和高不再与图像坐标轴平行。相较于水平矩形框,旋转矩形框一般包括更少的背景信息。旋转框检测常用于遥感等场景中,本博文简单的介绍了可应用于旋转框数据训练的开源库,数据结构…

佳易王各行业收银管理系统软件,企业ERP管理软件,企业或个体定制开发软件以及软件教程资源下载总目录,持续更新,可关注收藏查阅

系统简介 1、佳易王软件功能实用、操作简单、软件绿色免安装,解压即可使用,软件已经内置数据库,不需再安装其他数据库文件。 2、佳易王软件,已经形成系列,上百款管理系统软件涵盖多个行业。 3、已为多个企业个体定制…

【c++】——类和对象(下) ——内存管理

作者:chlorine 专栏:c专栏 目录 💻 C/C内存分布 💻C语言中动态内存管理方式:malloc/calloc/realloc/free ​编辑 💻C内存管理方式 👉new/delete操作内置类型 👉new和delete操作自定义类型 &#x1f…

makefile 学习(5)完整的makefile模板

参考自: (1)深度学习部署笔记(二): g, makefile语法,makefile自己的CUDA编程模板(2)https://zhuanlan.zhihu.com/p/396448133(3) 一个挺好的工程模板,(https://github.com/shouxieai/cpp-proj-template) 1. c 编译流…

Linux加强篇004-Vim编辑器与Shell命令脚本

目录 前言 1. Vim文本编辑器 1.1 编写简单文档 1.2 配置主机名称 1.3 配置网卡信息 1.4 配置软件仓库 2. 编写Shell脚本 2.1 编写简单的脚本 2.2 接收用户的参数 2.3 判断用户的参数 3. 流程控制语句 3.1 if条件测试语句 3.2 for条件循环语句 3.3 while条件循环语…

深入浅出 Linux 中的 ARM IOMMU SMMU II

SMMU 驱动中的系统 I/O 设备探测 要使系统 I/O 设备的 DMA 内存访问能通过 IOMMU,需要将系统 I/O 设备和 IOMMU 设备绑定起来,也就是执行 SMMU 驱动中的系统 I/O 设备探测。总线发现系统 I/O 设备并和对应的驱动程序绑定,与 IOMMU 设备驱动程…

死锁是什么?死锁是如何产生的?如何破除死锁?

1. 死锁是什么 多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。 2. 死锁的三种典型情况 一个线程, 一把锁, 是不可重入锁, 该线程针对这个锁连续加锁两次, 就会出现死锁. 两个线程…

Java多态:多态多态,多么变态

👑专栏内容:Java⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、重写1、重写的规则2、重写与重载的区别 二、多态1、多态的概念2、多态的实现3、向上转移和向下转型Ⅰ、向上转型Ⅱ、向下转…