设计模式

DesignPattern 设计模式学习笔记(面试和工作必备) 最近有很多粉丝留言:“学设计模式有什么用啊,好像我工作中都用不到设计模式,但每次面试都要问实际项目中使用了哪些设计模式,我都答不上来。” 面对这样的问题,我想说设计模式真的很重要。曾经我也认为学设计模式没什么用,但用过了都说好。所以,猿人花了一个星期的时间给大家整理了最常用的设计模式,通过源码和文档的形式分享给大家。 希望大家认真学习掌握,真正学以致用。不仅面试时要对答如流,实际工作中也要加以应用,这样能力才会得到提升。 一、设计模式介绍 设计模式(Design pattern)代表了最佳的实践,通常被有经 阅读详情

一、策略模式

策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
多用组合,少用继承
针对接口编程,不针对实现编程
接口绑定实现类

二、观察者模式

观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
出版社 + 订阅者 = 观察者模式

为了交互对象之间的松耦合设计而努力
松耦合的设计之所以能让我们建立有弹性的OO系统,能够应对变化,是因为对象之间的互相依赖降到了最低。

三、装饰者模式

装饰者模式动态地将责任附加到对象上。若要拓展功能,装饰者提供了比继承更有弹性的替代方案。
装饰者可以在所委托被装饰者的行为之前与(或)之后,加上自己的行为,以达到特定的目的。
类应该对拓展开放,对修改关闭。

四、工厂模式

工厂方法用来 处理对象的创建,并将这样的行为封装在子类中。这样,客户程序中关于超类的代码就和子类对象创建代码解耦了。
所有工厂模式都用来封装对象的创建。工厂方法模式通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
依赖倒置原则 要依赖抽象,不要依赖具体类
避免违反倒置原则:

  • 变量不可以持有具体类
  • 不要让类派生自具体类
  • 不要覆盖基类中已实现的方法

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,则不需要明确指定具体类。

五、单例(件)模式

单件模式确保一个类只有一个实例,并提供一个全局访问点。
多线程问题解决办法:

  1. synchronized, 将getInstance()变成同步方法,每个线程在进入这个方法之前,要等候别的线程离开。
    缺点很明显,我们只在第一次执行此方法才需要同步,以后都是累赘
  2. 直接在静态初始化器来创建单件。没有了延迟实例化的优点
  3. 用双重检查加锁,在getInstance()中减少使用同步
public class Singleton{
	private volatile static Singleton uniqueInstance;
	
	private Singleton() {}
	
	public static Singleton getInstance(){
		if(uniqueInstance == null){
			synchronzied (SingleTon.class){
				if(uniqueInstance == null){
					uniqueInstance = new Singleton();
				}
			}
		}
		return uniqueInstance;
   }
}

六、命令模式

命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

七、适配器模式与外观模式

适配器模式将一个类的接口,装换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
有两种适配器:对象适配器和类适配器。
对象适配器利用组合的方式将请求传送给被适配者;类适配器利用多继承。

外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

八、模板方法模式

模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

  • 钩子是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要去覆盖它。
  • 好莱坞原则(别调用我们,我们会调用你)告诉我们,将决策权放在高层模板中。
  • 策略模式和模板方法模式都封装算法,一个用组合,一个用继承。
  • 工厂方法时模板方法的一种特殊版本。

九、迭代器模式和组合模式

迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
尽量让每个类保持单一责任。
组合模式允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。

十、状态模式

状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
和程序状态机不同,状态模式用类代表状态

十一、代理模式

远程方法101
客户对象、客户辅助对象、服务辅助对象、服务对象
RMI提供了客户辅助对象和服务辅助对象,为客户辅助对象创建和服务对象相同的方法。

代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问

  • 远程代理控制访问远程对象

  • 虚拟代理控制访问创建开销大的资源

  • 保护代理基于权限控制对资源的访问

  • 防火墙代理控制网络资源的访问,保护主题免于“坏客户”的侵害

  • 智能引用代理 当主题被引用时,进行额外的引用动作,例如计算一个对象被引用的次数

  • 缓存代理 为开销大的运算结果提供暂时储存:它也允许多个客户共享结果,以减少计算或网络延迟

  • 同步代理在多线程的情况下为主题提供安全的访问

  • 复杂隐藏代理 用来隐藏一个类的复杂集合的复杂度,并进行访问控制。有时候也称为外观代理,这不难理解。复杂隐藏代理和外观模式是不一样的,因为代理控制访问,而外观模式只提供另一组接口。

  • 写入时复制代理用来控制对象的复制,方法是延迟对象的复制,直到客户真的需要为止。这是虚拟代理的变体。

十二、复合模式

MVC是复合模式,结合了观察者模式、策略模式和组合模式。

  • 模型使用观察者模式,以便观察者更新,同时保持两者之间的解耦
  • 控制器是视图的策略,视图可以使用不同的控制器实现,得到不同的行为
  • 视图使用组合模式实现用户界面,用户界面通常组合了嵌套的组件,想面板,框架和按钮。

十三、其他的设计模式

  • 桥接
  • 生成器
  • 责任器
  • 蝇量
  • 解释器
  • 中介者
  • 备忘录
  • 原型
  • 访问者
深入解析DesignPattern设计模式:面向对象编程的实用指南 适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户端期望的另一个接口。这种模式适用于需要复用某些类,但它们的接口不兼容的情况。通过适配器,可以使得原本由于接口不兼容而无法协同工作的类可以一起工作。适配器模式主要包含以下几个角色:目标接口(Target):这是客户端所期待的接口。需要适配的类(Adaptee):需要适配的类,即我们希望将接口转换成Target的类。适配器(Adapter):适配器将Adaptee的接口转换成Target接口。 阅读详情

相关推荐

IAR编译相同工程生产hex文件checksum不一致问题

IAR Checksum

xqw19891201的博客 1382

DesignPattern设计模式

本文主要介绍了设计模式相关内容。包括软件设计的SOLID原则,设计模式的分类,单例模式的思想与实现,工厂模式的思想与实现,建造者模式的思想与实现,代理模式的思想与实现,责任链模式的思想与实现等内容。供个人学习使用。

专注Java和MySQL领域知识分享 1871

YOLOv8n模型导出ONNX的避坑指南:解决版本差异,正确生成TensorRT/RKNN所需输出节点

本文详细介绍了YOLOv8n模型导出ONNX格式的实战避坑指南,涵盖版本差异处理、代码修改技巧及TensorRT/RKNN部署优化方案。针对不同推理框架需求,提供输出节点生成、动态轴处理和后处理划分等核心问题的解决方案,帮助开发者高效完成模型部署。

weixin_33247358的博客 355

设计模式实战教程:基于 youngyangyang04/DesignPattern 开源项目

设计模式实战教程:基于 youngyangyang04/DesignPattern 开源项目 本教程旨在全面介绍位于 GitHub 的设计模式开源项目。通过深入浅出的讲解,我们将涵盖项目的核心要素,提供快速上手指南,展示经典应用场景,以及探索其在技术生态中的位置。 1. 项目介绍 设计模式 是软件开发中的一套成熟解决方案,用于解决常见的设计问题并促进代码的可重用性、可维护性和扩展性。此开源项目 D...

gitblog_00568的博客 1057

(3万字深度解析)Kaggle《房价预测:高级回归技巧》详解复现攻略

在这篇教程式文章中,我们从零开始完成了 Kaggle《房价预测:高级回归技巧》比赛的复现工作,涵盖了数据预处理、特征工程、模型训练、调优、解释和融合的完整流程。深入理解数据:阅读数据描述,结合常识对每个特征作出合理处理(如缺失值填充’None’表示无此设施 、异常值剔除 等)。对目标和偏态特征进行对数变换,使分布更平滑,从而更好满足模型假设并提升准确度。特征工程:我们创造了总面积、总浴室等新特征,整合信息提高模型可学习性。

qq_38334677的博客 1768

3D医学影像分割实战:从数据预处理到模型训练全流程解析

本文详细解析了3D医学影像分割的全流程,从数据预处理到模型训练,重点介绍了nnUNet框架的应用技巧。通过实战案例,帮助开发者掌握如何处理复杂的.nii.gz文件格式、优化数据预处理流程以及高效训练3D分割模型,特别适合医学影像分析领域的从业者参考。

weixin_29098367的博客 222

设计模式DesignPattern【1】

设计模式是对于反复出现的问题的解决方案,是关于如何解决某些问题的指南。它们不是可以插入应用程序中的类、包或库。相反,这些是关于如何在某些情况下解决某些问题的指导方针,是一种思想方面的东西。设计模式是软件设计中常见问题的典型解决方案。它们就像预制的蓝图,你可以对其进行自定义以解决代码中反复出现的设计问题。

2301_80272161的博客 1106

在AVP28335(兼容德州仪器TMS320-28335) 上实现ModbusSlaveRTU-485源码及注释。

今天先把题目先给出来, 在近两天会把源码 (含详细注释 )及部署、测试结果给出来, 希望能给大家帮助。(全免费 我有点缺德,断了别人的一个财路)。

FOOLCODE的专栏 639

设计模式实践教程 - 基于 micooz/DesignPattern 开源项目

设计模式实践教程 - 基于 micooz/DesignPattern 开源项目 项目介绍 该项目由 Github 用户 micooz 维护,是针对软件开发中常见设计模式的实现集合。它旨在提供一个学习和理解各种设计模式的实战平台,涵盖了从单例模式到观察者模式等二十多种经典设计模式。通过此仓库,开发者可以深入学习每种模式的概念、应用场景及其实现细节,助力提升代码质量和可维护性。 项目快速启动 环境要求...

gitblog_00751的博客 818

Windows 2008 R2虚拟机跑金蝶K3 WISE 12.1的5个关键配置细节(附避坑清单)

本文详细介绍了在Windows Server 2008 R2虚拟机中部署金蝶K3 WISE 12.1的5个关键配置细节,包括服务器角色与账户权限、组件服务调优、数据库与中间层协同部署、补丁管理策略及性能优化工具。这些实战经验可帮助企业IT团队避免常见陷阱,确保ERP系统稳定运行。

weixin_30847939的博客 316

PostgreSQL:Patroni 高可用架构,基于etcd的自动故障转移集群

本文详细介绍了基于Patroni和etcd构建PostgreSQL高可用集群的方案。Patroni作为外部守护进程,通过etcd分布式协调服务实现自动故障转移、主节点选举等关键功能,弥补了PostgreSQL原生缺乏自动故障转移的不足。文章涵盖核心架构(3节点PG+3节点etcd)、环境规划、etcd集群部署(包括配置验证)以及Patroni安装配置的关键步骤,特别强调了Patroni自动初始化PG实例、配置同步复制等生产级特性。该方案通过外部组件协同工作,在不修改PG源码的情况下实现了生产环境所需的高可用

数据知道的博客 2486

DesignPattern 开源项目教程

DesignPattern 开源项目教程 1. 项目的目录结构及介绍 DesignPattern 项目的目录结构如下: DesignPattern/ ├── src/ │ ├── AbstractFactory/ │ ├── Adapter/ │ ├── Bridge/ │ ├── Builder/ │ ├── ChainOfResponsibility/ │ ├── Co...

gitblog_00406的博客 558

TIA Portal (博图) -两台不同网段S7-1200通信(上)

因为不同网段意味着它们默认不在同一个广播域,并且没有网关设备来处理路由,所以标准的 TCP/IP 通信(如 `TSEND_C`/`TRCV_C`)无法直接建立连接。S7 通信 (PUT/GET): 最简单,配置好连接后,在客户端 PLC 使用 `PUT` 指令发送数据到服务器 PLC,使用 `GET` 指令从服务器 PLC 读取数据。* 在地址详细信息中,确保 本地连接端点是客户端 PLC 的接口,远程连接端点是服务器 PLC 的接口和 IP (`192.168.2.20`)。

电工 2677

探索设计模式的艺术:JackChan1999的DesignPattern项目

探索设计模式的艺术:JackChan1999的DesignPattern项目 在编程的世界中,设计模式是解决问题的利器,是经验与智慧的结晶。今天我们要介绍的开源项目【DesignPattern】,是由开发者JackChan1999精心编写的,旨在帮助程序员理解和应用各种设计模式。 项目简介 这个项目是一个全面的设计模式参考库,包含了GOF的23种经典设计模式,以及一些现代编程中的新型模式。每一种模...

gitblog_00018的博客 493

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

开源项目 DesignPattern 使用教程

开源项目 DesignPattern 使用教程 1. 项目的目录结构及介绍 DesignPattern/ ├── src/ │ ├── creational/ │ │ ├── abstract_factory/ │ │ ├── builder/ │ │ ├── factory_method/ │ │ ├── prototype/ │ │ └── sing...

gitblog_00818的博客 367

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

DesignPattern 项目教程

DesignPattern 项目教程 1. 项目目录结构及介绍 DesignPattern/ ├── abstractFactory/ ├── adapter/ ├── bridge/ ├── factory/ ├── prototype/ ├── proxy/ ├── singleton/ ├── state/ ├── strategy/ ├── LICENSE └── README.md ...

gitblog_00077的博客 418

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

推荐开源项目:DesignPattern —— 翻越编程丛林的设计模式指南

推荐开源项目:DesignPattern —— 翻越编程丛林的设计模式指南 在编程的世界里,设计模式就像是一座座灯塔,引导开发者们在复杂系统中找到最佳实践和解决方案。今天,我们向您隆重推荐一个开源项目——DesignPattern,它是由FengJungle发起并维护的一系列关于设计模式的讲解与实现。这个项目不仅提供了详尽的理论知识,还辅以实际代码示例,帮助开发者从实践中理解并掌握设计模式。 项目...

gitblog_00021的博客 438

设计模式 - DesignPattern

1.设计模式的分类?     设计模式分为三大类:     创建型模式,共五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。     结构型模式,共七种:适配器模式,装饰模式,代理模式,外观模式,桥接模式,组合模式,享元模式。     行为型模式,共十一种:策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命名模式,                            ...

lanhai_scut的博客 365

彻底搞懂设计模式DesignPattern-23种设计模式整理

设计模式介绍 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案, 设计模式(Design pattern)代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式的本质提高 软件的维护性,通用性和扩展性,并降低软件的复杂 度。 <<设计模式>> 是经典的书,作者是 Erich Gamma、 Richard Helm、 Ralph Johnson 和 John Vlissides

Ping 1105

DesignPattern

 DesignPatternscreen.width-250) this.width=screen.width-250" align="left" border="0"/>程式設計是思維具體化的一種方式,是思考如何解決問題的過程,設計模式是在解決問題的過程中,一些良好思路的經驗集成,最早講設計模式,人們總會提到 Gof 的著作,它最早將經典的23種模式集合在一起說明,對後期學習程式設計,尤其是對從

陈亚平 的技术博客 1251

13.DesignPattern设计模式(by-朝夕)

DesignPattern前言1. DesignPattern? 前言 DesignPattern 1. DesignPattern?

王永安的博客 807

DesignPattern设计模式-总览

设计模式总览及设计模式六大原则

Fuck Job interview! 445

设计模式(Designpattern)

什么是设计模式 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。它提供了软件开发过程中面临的一般问题的最佳解决方案。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 设计模式主要是基于以下的面向对象设计原则: 对接口编程而不是对实现编程。 优先使用对象组合而不是继承。 设计模式六大原则 开闭原则(Open Close Pr

LP_stone的专栏 509

DesignPattern - 设计原则与设计模式初探

欢迎关注微信公众号:FSA全栈行动 ???? 一、设计原则 设计模式是站在设计原则的基础之上的,所以在学习设计模式之前,有必要了解一下设计原则 软件设计开发原则 为了让代码有更好的重用性,可读性,可靠性,可维护性 有六大原则,英文首字母拼在一起就是 SOLID(稳定的),所以也称之为 SOLID 原则 1、单一职责原则(Single Responsibility Principle) 一个类只负责一个功能领域中的相应职责,就一个类而言,应该只有一个引起它变化的原因 是实现 高内聚、低耦合 的指

GitLqr的博客 349
上一篇: JAVA笔记八:并发
下一篇: 深入理解JVM一:Java内存区域与内存溢出异常
张小飘
博客等级 码龄11年 9粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值