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

news2024/11/17 11:46:37

《大话设计模式》

  • 序 为什么要学设计模式
  • 第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.coloradmin.cn/o/1250410.html

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

相关文章

篮桥云课-摆玩具

思维好题 一开始掉进了二分的陷阱&#xff0c;发现看看逐个位置的差&#xff0c;我们要分成k段就是要取消k-1个最大的逐差 然后将剩余的加起来就可以了 因为本体保证是从小到大给出的 这一点保证了答案的正确性&#xff0c;自己没想出来 还是太菜了 #include<bits/stdc.h&…

hdlbits系列verilog解答(exams/m2014_q4i)-45

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路&#xff1a; 二、verilog源码 module top_module (output out);assign out 1b0;endmodule三、仿真结果 转载请注明出处&#xff01;

【LeetCode】每日一题 2023_11_25 二叉树中的伪回文路径(dfs,数组/位运算)

文章目录 刷题前唠嗑题目&#xff1a;二叉树中的伪回文路径题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 这个月第一次周末早起~ 题目&#xff1a;二叉树中的伪回文路径 题目链接&#xff1a;1457. 二…

kafka,RabbitMQ,RocketMQ,他们之间的区别,架构,如何保证消息的不丢失,保证不重复消费,保证消息的有序性

文章目录 Kafka、RabbitMQ、RocketMQ 之间的区别是什么&#xff1f;性能数据可靠性服务可用性功能 RabbitMQ如何保证消息不丢失&#xff1f;Kafka 的架构说一下&#xff1f;Kafka 怎么保证消息是有序的&#xff1f;Kafka 怎么解决重复消费&#xff1f;Kafka 怎么保证消息不丢失…

践行“互联网+中药服务”理念,华润煎配中心打造智能代煎新模式

移动互联网时代&#xff0c;“互联网&#xff0b;”浪潮迭起&#xff0c;中药企业开始探索“互联网&#xff0b;中药服务”模式。 华润湖南医药有限公司&#xff08;以下简称“华润湖南医药”&#xff09;作为华润集团旗下华润湖南医药商业集团全资控股的大型医药企业&#xff…

[SWPUCTF 2021 新生赛]no_wakeup

直接赋值即可 $a ->admin admin; $a ->passwd wllm; 发现没有绕过&#xff0c;改成大于2的绕过__wakeup 这是因为PHP在反序列化时会检查序列化字符串的长度&#xff0c;如果长度小于等于2&#xff0c;则不会调用__wakeup()方法。

YOLOv8改进 | 2023 | MPDIoU、InnerMPDIoU助力细节涨点

论文地址&#xff1a;官方论文地址点击即可跳转 代码地址&#xff1a;官方并没有开源的该损失的函数的代码&#xff0c;我根据文章内容进行了复现代码块在第三章 一、本文介绍 本文为读者详细介绍了YOLOv8模型的最新改进&#xff0c;带来的改进机制是最新的损失函数MPDIoU和融…

在游戏开发中,实时渲染和离线渲染对于游戏平衡的影响有哪些?

实时渲染和离线渲染对游戏平衡有那些影响呢&#xff1f;在游戏开发中&#xff0c;渲染方式的选择对游戏的整体表现和玩家体验有着至关重要的作用。那么&#xff0c;实时渲染和离线渲染究竟有哪些利弊呢&#xff1f; 一、实时渲染 实时渲染&#xff0c;顾名思义&#xff0c;是…

Windows核心编程 进程间通信

目录 进程间通信概述 发送消息 WM_COPYDATA DLL共享段 文件映射 文件相关API CreateFile ReadFile WriteFile CloseHandle SetFilePointerEx 设置文件指针 获取文件大小 GetFileSize 结构体 LARGE_INTEGER 文件映射用于读写文件数据 文件映射用于进程间通信(带文…

Xilinx Zynq-7000系列FPGA实现视频拼接显示,提供两套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐FPGA图像处理方案FPGA视频拼接叠加融合方案推荐 3、设计思路详解Video Mixer介绍 4、工程代码1&#xff1a;2路视频拼接 HDMI 输出PL 端 FPGA 逻辑设计PS 端 SDK 软件设计 5、工程代码2&#xff1a;4路视频拼接 HDMI 输出PL 端 FPGA 逻辑设…

【SpringBoot篇】阿里云OSS—存储文件的利器

文章目录 &#x1f339;什么是阿里云OSS⭐阿里云OSS的优点 &#x1f3f3;️‍&#x1f308;为什么要使用云服务OSS&#x1f384;使用步骤⭐OSS开通⭐参考官方SDK &#x1f354;编写代码⭐上传文件 &#x1f339;综合案例 &#x1f339;什么是阿里云OSS 阿里云对象存储&#xf…

css给盒子写四个角

如图&#xff1a;之前一直用定位 现在发现可以用css写 background: linear-gradient(to top, #306eef, #306eef) left top no-repeat, /*上左*/ linear-gradient(to right, #306eef, #386eef) left top no-repeat, /*左上*/ linear-gradient(to left, #386eef, #306eef) righ…

Java核心知识点整理大全13-笔记

Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全2-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全3-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全4-笔记-CSDN博客 Java核心知识点整理大全5-笔记-CSDN博客 Java核心知识点整理大全6…

【网易云商】构建高效 SaaS 系统的技术要点与最佳实践

SaaS 是什么 定义 相信大家都对云服务中的 IaaS、PaaS、SaaS 早就有所耳闻&#xff0c;现在更是衍生出了 aPaaS、iPaaS、DaaS 等等的类似概念。对于 SaaS 也有各种各样的定义&#xff0c;本文给出的定义是&#xff1a; SaaS 是一种基于互联网提供服务和软件的交付模式&#xf…

自动化部署 扩容openGauss —— Ansible for openGauss

前言 大家好&#xff0c;今天我们为大家推荐一套基于Ansible开发的&#xff0c;自动化部署及扩容openGauss的脚本工具&#xff1a;Ansible for openGauss&#xff08;以下简称 AFO&#xff09;。 通过AFO&#xff0c;我们只需简单修改一些配置文件&#xff0c;即可快速部署多种…

elasticsearch 索引库操作和文档操作

文章目录 索引库操作mapping映射属性索引库的CRUD&#xff08;创建&#xff0c;读取&#xff0c;更新&#xff0c;删除&#xff09;创建索引库和映射基本语法&#xff1a;示例&#xff1a; 查询索引库修改索引库删除索引库 文档操作新增文档查询文档删除文档修改文档全量修改增…

2023年亚太杯数学建模C题新能源汽车成品文章(思路模型代码成品)

一、翻译 新能源汽车是指采用先进的技术原理、新技术和新结构&#xff0c;以非常规车用燃料&#xff08;非常规车用燃料是指汽油和柴油以外的燃料(非常规车用燃料是指汽油和柴油以外的燃料&#xff09;&#xff0c;并集成了汽车动力控制和驱动等先进技术的汽车。新能源汽车包括…

新版PY系列离线烧录器,支持PY002A/002B/003/030/071等MCU各封装,不同 FLASH 大小型号

PY系列离线烧录器&#xff0c;目前支持PY32F002A/002B/002/003/030/071/072/040/403/303 各封装、不同 FLASH 大小型号。PY离线烧录器需要搭配上位机软件使用&#xff0c;上位机软件可以在芯岭技术官网上下载&#xff0c;还包括了离线烧录器的使用说明。PY离线烧录器使用MINI U…

激光雷达报告:单月上车提前突破5万台关口!车企真实搭载「去伪存真」

高工智能汽车研究院监测数据显示&#xff0c;截至2023年9月&#xff0c;激光雷达已经连续2个月交付破5万台关口。 这也意味着&#xff0c;这一交付关口早于预期被突破。回溯来看&#xff0c;2023年6月&#xff0c;高工智能汽车研究院在第十四届智驾开发者大会上释放预测&#…

AIDL 如何分片传输大量 Parcelable 数据列表

本文针对 AIDL 跨进程传输大量 Parcelable 数据所产生的问题总结出一套分片传输的解决方案&#xff0c;并分析了一下其实现的原理。 1. 概述 大家在通过 AIDL 实现跨进程数据传输的时候&#xff0c;可能会遇到数据量过大导致异常的情况&#xff0c;通常抛出的异常如下&#xf…