00 |设计模式 开篇详解

JAVA设计模式征服之路-00-设计模式简介 系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例 阅读详情

Design pattern

主要用途

  • 开发人员的共同平台
    设计模式提供了一个标准的术语系统,且具体到特定的情景。eg,单例
  • 最佳的实践
    它们提供了软件开发过程中面临的一般问题的最佳解决方案。

设计模式的六大原则

1、开闭原则(Open Close Principle)

开闭原则的意思是:对扩展开放,对修改关闭。
在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。
想要达到这样的效果,我们需要使用接口和抽象类。

2、里氏代换原则(Liskov Substitution Principle)

任何基类可以出现的地方,子类一定可以出现。
LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。

3、依赖倒转原则(Dependence Inversion Principle)

这个原则是开闭原则的基础,具体内容:针对对接口编程,依赖于抽象而不依赖于具体。

  • 低层模块:不可分割的原子逻辑,可能会根据业务逻辑经常变化。
  • 高层模块:低层模块的再组合,对低层模块的抽象。
  • 抽象: 接口或抽象类(是底层模块的抽象,特点:不能直接被实例化)
  • 与接口或抽象类对应的实现类:低层模块的具体实现(特点:可以直拉被实例化)

“高层模块不应该依赖于低层模块,二者都应该依赖于抽象。”这一原则在分层架构模式中,得到了淋漓尽致地运用。

eg:汽车驾驶的一个例子
在这里插入图片描述
在这里插入图片描述
场景运行结果如下:
在这里插入图片描述
现在张三赚了一些钱,买了一辆宝马汽车: 就悲剧了
所以需要修改依赖,解耦。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、接口隔离原则(Interface Segregation Principle)ISP

使用多个隔离的接口,比使用单个接口要好。
客户端不应该依赖它不需要的接口
降低类之间的耦合度。
类间的依赖关系应该建立在最小的接口上。
必须首先满足单一职责原则

接口分为以下两种:

  • 实例接口(Object Interface):
    在Java中声明一个类,然后用new关键字产生一个实例,是对一个类型的事物的描述,这就是一种接口。或许我们乍一看会有点懵,怎么和我们原来学习的接口不一样呢,其实我们这样想,我们都知道,在Java中有一个Class类,表示正在运行的类和接口,换句话说每一个正在运行时的类或接口都是Class类的对象,这是一种向上的抽象。接口是一种更为抽象的定义,类是一类相同事物的描述集合,那为什么不可以抽象为一个接口呢?
  • 类接口(Class Interface):
    这就是我们经常使用的用interface定义的接口

其实通俗来理解就是,不要在一个接口里面放很多的方法,这样会显得这个类很臃肿不堪。接口应该尽量细化,一个接口对应一个功能模块,同时接口里面的方法应该尽可能的少,使接口更加轻便灵活。

未遵循接口隔离原则的设计:
在这里插入图片描述
遵循接口隔离原则的设计:
在这里插入图片描述

根据接口隔离原则拆分接口时,必须首先满足单一职责原则。

举例:
星探 找 美女。
在这里插入图片描述

public interface IPettyGirl {
//要有姣好的面孔
public void goodLooking();
//要有好身材
public void niceFigure();
//要有气质
public void greatTemperament();
}

public class PettyGirl implements IPettyGirl {
private String name;
//美女都有名字
public PettyGirl(String _name){
 this. name=_name;
 }
//脸蛋漂亮
public void goodLooking() {
 System. out.println(this. name + "---脸蛋很漂亮!");
 }
//气质要好
public void greatTemperament() {
 System. out.println(this. name + "---气质非常好!");
 }
//身材要好
public void niceFigure() {
 System. out.println(this. name + "---身材非常棒!");
 }
}
/////星探
public abstract class AbstractSearcher {
protected IPettyGirl pettyGirl;
public AbstractSearcher(IPettyGirl _pettyGirl){
 this.pettyGirl = _pettyGirl;
 }
//搜索美女,列出美女信息
public abstract void show();
}

//////
public class Client {
//搜索并展示美女信息
public static void main(String[] args) {
 //定义一个美女
 IPettyGirl yanYan = new PettyGirl(" 嫣嫣");
 AbstractSearcher searcher = new Searcher(yanYan);
 searcher.show();
 }
}

--------美女的信息如下: ---------------
嫣嫣---脸蛋很漂亮!
嫣嫣---身材非常棒!
嫣嫣---气质非常好!

but有些女孩 只拥有 其中 3种 优点中的1 2种。怎么办?
那么,细化接口:

public interface IGoodBodyGirl {
//要有姣好的面孔
public void goodLooking();
//要有好身材
public void niceFigure();
}

public interface IGreatTemperamentGirl {
//要有气质
public void greatTemperament();
}

////实现类没有改变,只是实现类两个接口,源码如下:
public class PettyGirl implements IGoodBodyGirl,IGreatTemperamentGirl {
private String name;
//美女都有名字
public PettyGirl(String _name){
 this. name=_name;
 }
//脸蛋漂亮
public void goodLooking() {
 System. out.println(this. name + "---脸蛋很漂亮!");
 }
//气质要好
public void greatTemperament() {
 System. out.println(this. name + "---气质非常好!");
 }
//身材要好
public void niceFigure() {
 System. out.println(this. name + "---身材非常棒!");
 }
}

5、迪米特法则,又称最少知道原则(Demeter Principle)

最少知道原则是指:
通俗的说法有很多,比如,只与你直接的朋友们通信;不要跟“陌生人”说话;
高内聚,低耦合。

一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
在这里插入图片描述
在这里插入图片描述

6、合成复用原则(Composite Reuse Principle)

合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。

合成/聚合复用原则是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。
eg:
在这里插入图片描述
在这里插入图片描述

设计模式的类型

创建型模式

这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用新的运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。

工厂模式(Factory Pattern)
抽象工厂模式(Abstract Factory Pattern)
单例模式(Singleton Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)

结构型模式

这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。

适配器模式(Adapter Pattern)
桥接模式(Bridge Pattern)
过滤器模式(Filter、Criteria Pattern)
组合模式(Composite Pattern)
装饰器模式(Decorator Pattern)
外观模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)

行为型模式

这些设计模式特别关注对象之间的通信。

责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
备忘录模式(Memento Pattern)
观察者模式(Observer Pattern)
状态模式(State Pattern)
空对象模式(Null Object Pattern)
策略模式(Strategy Pattern)
模板模式(Template Pattern)
访问者模式(Visitor Pattern)

J2EE 模式

这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。

MVC 模式(MVC Pattern)
业务代表模式(Business Delegate Pattern)
组合实体模式(Composite Entity Pattern)
数据访问对象模式(Data Access Object Pattern)
前端控制器模式(Front Controller Pattern)
拦截过滤器模式(Intercepting Filter Pattern)
服务定位器模式(Service Locator Pattern)
传输对象模式(Transfer Object Pattern)

在这里插入图片描述

参考文章

https://www.w3cschool.cn/shejimoshi/design-pattern-intro.html
https://www.cnblogs.com/oumyye/p/4392854.html
https://blog.youkuaiyun.com/zhonghuan1992/article/details/38358183

Conda报错急救指南:遇到Malformed version string ‘~‘怎么办?(附最新解决方案) 本文深度解析Conda报错`Malformed version string '~'`的根源与解决方案。该错误通常由版本字符串解析异常或Conda版本过旧引起。文章提供了从清理缓存、针对性升级到环境重建的完整修复流程,并强调了升级Conda至最新版本是解决此类`CondaValueError`问题的根本方法,帮助开发者高效恢复工作环境。 阅读详情

相关推荐

微信Dat文件转图片(文末含工具下载)

PC端微信dat图片转换为jpg格式

weixin_40704848的博客 8080

自己经历的Java面试题(附答案)

本篇记录一下自己面试的一些中大厂(包括BAT)的 1~3年Java开发的面试题以及自己对题目理解的答案(结合网上查的资料)

finalheart的博客 1637

Python 逆向解析知乎盐选反爬字体,实现内容精准还原

本文详细解析了知乎盐选内容的反爬字体机制,并提供了使用Python逆向解析WOFF字体文件的完整方案。通过fontTools库构建解码字典,实现乱码文本的精准还原,帮助开发者应对动态字体策略,同时强调法律与道德风险。

weixin_29268385的博客 1295

00 设计模式介绍

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。

wyh106115的博客 1181

Windows下飞桨PaddlePaddle 2.6.1 GPU版环境搭建全攻略(含CUDA 11.7配置避坑指南)

本文详细介绍了在Windows系统下搭建飞桨PaddlePaddle 2.6.1 GPU版环境的完整流程,特别针对CUDA 11.7和cuDNN的安装提供了避坑指南。从Anaconda环境配置、CUDA Toolkit安装到飞桨GPU版的验证,手把手帮助开发者高效完成深度学习环境搭建,解决常见问题并优化性能。

x8y9z0的博客 1094

Ubuntu Rtx3090 Cuda11.7 安装 pytorch3d

pytorch ubuntu pytorch3d 安装

G果的博客 2273

00 设计模式开篇--java

已经很久没有写博客了,过了一个十一假期,没有说有了一些的世俗气的经历,也算是有了一些经验。 看到之前博客写到了jdk源码的一部分,突发奇想,感觉也应该在复习准备一下设计模式相关的知识。不知道受不受大家或者读者的喜爱了。个人感觉设计模式需要定期的看一看,有些时候,还是有些遗忘。 对于经常编码的人来说,可能有几种东西平时肯定需要经过一定时间的锻炼才能逐渐消化成为自己的东西,设计模式就算是一个。不知...

Burgess_Lee的博客 168

使用Google Earth Engine下载JRC全球水体数据

通过Google Earth Engine平台和提供的源代码,研究人员和水资源管理者可以方便地获取和利用这一重要的水资源监测数据集,从而开展相关的研究和决策支持工作。要使用Google Earth Engine下载JRC全球水体数据,首先需要在Google Earth Engine平台上进行注册和登录。JRC全球水体数据是由欧洲联合研究中心开发的高分辨率全球水体分类数据集,覆盖了整个地球的陆地和水域。下载完成后,你可以使用各种遥感数据处理软件来打开和分析这些数据,以满足不同的研究和应用需求。

LrlDebug的博客 1158

设计模式-00-简介

1)第1层:刚开始学编程不久,听说过什么是设计模式2)第2层:有很长时间的编程经验,自己写了很多代码,其中用到了设计模式,但是自己却不知道3)第3层:学习过了设计模式,发现自己已经在使用了,并且发现了一些新的模式挺好用的4)第4层:阅读了很多别人写的源码和框架,在其中看到别人设计模式,并且能够领会设计模式的精妙和带来的好处5)第5层:代码写着写着,自己都没有意识到使用了设计模式,并且熟练的写了出来1)设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验。

被拯救的威尼斯的博客 1343

openpi 入门教程(二)droid libero 训练、推理

OpenPI是由物理智能团队发布的机器人领域开源模型与软件平台,提供基于流扩散式(π₀)和自回归式(π₀-FAST)两类视觉-语言-动作模型。平台支持在DROID、ALOHA、UR5等多种机器人系统上部署,包含预训练检查点(1万+小时数据)和微调示例。文档详细说明了各平台部署流程:DROID需启动策略服务器并配置摄像头;ALOHA提供真实机器人任务(取吐司、叠毛巾等)的检查点和场景设置建议;UR5示例展示自定义数据转换方法。实验性验证显示π₀-FAST在LIBERO基准测试中平均得分85.5。平台强调模型适

2506_90492529的博客 1023

Floyd (弗洛伊德)算法简述

Floyd在1962年由Robert Floyd以其当前公认的形式出版。算法作为三个嵌套for循环的现代公式首先由Peter Ingerman在1962年描述。Floyd 算法是解决图论问题的比较经典的算法,是解决给定的加权图中顶点间的最短路径的一种算法,可以正确处理有向图的最短路径问题。

慕羽★的博客 2万+

设计模式开篇

设计模式开篇前言设计模式周计划周计划进度 前言 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式周计划 从本周开始实施设计模式周计划,所谓周计划不是说一周之内学完设计模式,这太扯了;也不是说每周都学习一个设计模式;而是说一旦开始接触一个新的设计模式,那么就要在本周(自然周内)内全面了解他,并使用一个demo来

潮汐先生的专栏 126

python+playwright 学习-10.pytest-playwright插件编写测试用例

pytest-playwright插件完美的继承了pytest 用例框架和playwright基础使用的封装,基本能满足工作中的常规需求了,不需要我们再做额外的插件开发。

qq_27371025的博客 2509

设计模式专题00——基础

设计模式之基本原则

继续激情,继续奋斗。 947

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

00 设计模式综述

在软件工程中,设计模式(Design Pattern)是对软件设计中反复出现的各种问题,所提出的解决方案。设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 面向对象的设计模式通常用来描述类或对象其中的关

zhanxi1992的专栏 290

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++设计模式00——元篇

设计模式(英语designpattern)是对面向对象设计中反复出现的问题的解决方案。这个术语是在1990年代由ErichGamma等人从建筑设计领域引入到计算机科学中来的。这个术语的含义还存有争议。算法不是设计模式,因为算法致力于解决问题而非设计问题。设计模式通常描述了一组相互紧密作用的类与对象。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标。本系列均采用伪代码的形式,代码来源为李建忠老师的设计模式课程。🤞🤞🤞。......

qq_51340322的博客 449

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

00.认识设计模式

认识设计模式认识设计模式简介设计模式分类模式之间的关系设计模式的六大原则 认识设计模式 简介 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人

潮汐先生的专栏 175

百元价位静音拇指滚轮鼠标:办公效率与静音体验的平衡之选

在计算机外设领域,鼠标作为人机交互的核心设备,其性能与设计直接影响工作效率和用户体验。从技术原理上看,鼠标通过传感器追踪位移,微动开关实现点击确认,而滚轮则负责垂直与水平滚动。静音微动通过改良内部结构,使用软性材料缓冲撞击,显著降低了操作噪音,解决了图书馆、共享办公室等安静环境的干扰问题。拇指滚轮则将高频的横向滚动操作独立出来,符合人体工学,能有效减少手腕疲劳,提升Excel表格处理、代码阅读、视频剪辑等场景的操作流畅度。这些技术价值的核心在于,它们并非简单堆砌功能,而是精准切入办公人群对效率提升和环境友好

weixin_33981932的博客 309

【从零入门23种设计模式00】认识设计模式

设计模式是面向对象编程中解决常见问题的可复用方案,由GOF四人组在《设计模式》一书中首次系统提出。23种设计模式分为创建型(5种)、结构型(7种)和行为型(11种)三大类,分别解决对象创建、组合和交互问题。核心优势包括解耦代码、提高复用性、增强扩展性和统一规范,但也存在增加复杂度、学习成本高和过度设计等缺点。设计模式适用于需要频繁扩展的复杂场景,而简单需求应优先采用直接实现。关键在于权衡灵活性与复杂度,做到"按需使用"而非生搬硬套。

2401_87662859的博客 1289

常见的java设计模式详解

常见的java设计模式详解1. 根据目的来分2 GoF的23种设计模式的功能新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与...

勇智的博客 2623

二、00【设计模式】之前言总结

今天的博客主题 设计模式——》设计模式之前言总结 设计原则回顾 1)开闭原则 OCP(Open Close Principle) 开闭原则是说:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2)单一职责 SRP (Simple Responsibility Pinciple) 单一职责就是一个类或方法只负责...

刘总Java 256

设计模式-00 设计模式简介之几大原则

设计模式相关的浅解,并运用modern cpp 来是实现,描述相关设计模式

jxusthusiwen的专栏 1170

【00】 设计模式类型

设计模式的类型 创建型模式 创建型模式提供了一种在创建对象的同时隐藏创建逻辑的方式,这使得程序在判断针对某个给定示例需要创建哪些对象时更加灵活 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 结构型模式 结构型模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式 适配

N_O_A_maker的博客 193

设计模式总结00--设计模式基础介绍

设计模式基础介绍 参考链接 https://www.cnblogs.com/adamjwh/p/9033549.html

zhouyuming_hbxt的博客 268

后浪 来学习吧!设计模式【00】总论

设计模式【00】总论 什么是设计模式 在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书,该书首次提到了软件开发中设计模式的概念。四位作者合称 GOF(四人帮,Gang of Four)。他们所提出的设计模式主要是基于以

qq_39555852的博客 262

【设计模式 00】设计模式的六大原则

设计模式的六大原则 参考: 设计模式六大原则 1. 单一职责原则 一个类只负责一个明确的功能 优点: 降低类的复杂度,提高代码可读性和可维护性 降低变更时对其他功能的影响 2. 里氏替换原则 **原则一:**若 o1 是 C1 的一个实例化对象, o2 是 C2 的一个实例化对象,如果在使用 C1 的程序中将o1 替换为 o2 而程序行为没有发生变化,那么 C2 应该是 C1 的子类。 **原则二:**所有用到基类对象的地方,如果把基类对象替换成子类对象,程序行为不应该发生变化。 实现方法:

面向对象的笔记 721
上一篇: 00 | 移动开发 提纲
下一篇: 02 |算法总结
阿杰、
博客等级 码龄11年 13粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值