设计模式笔记

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

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。(百度百科http://baike.baidu.com/view/66964.htm)

一个很不错很全面的介绍设计模式的网站:http://www.riabook.cn/doc/designpattern/

 网站内容摘要:

From Gossip@caterpillar

非关语言: 设计模式

设计模式并不神秘。。。 程式设计是思维具体化的一种方式,是思考如何解决问题的过程,设计模式是在解 决问题的过程中,一些良好思路的经验集成,最早讲设计模式,人们总会提到  Gof  的著作 ,它最早将经典的 23 种模式集合在一起说明,对后期学习程式设计,尤其是对从事物件导向程式设计的人们起了莫大的影响。

后来设计模式一词被广泛的应用到各种经验集成,甚至还有反模式(AntiPattern),反模式教导您如何避开一些常犯且似是而非的程式设计思维。

这边的话将整理一些设计模式学习心得,实作的部份是使用Java,因而您会看到一些与 Gof 模式不同的图及实作方式,这是为了善用一些Java本身的特性,至于C++的实作方面,Gof 的书已经给了不少的例子。

在一些模式的实作上,您会发现我用了介面(interface)来取代抽象类别(Abstract class),这与原先的Gof书中的范例会不尽相同,这是因为在C++中没有介面,一个完全没有实作任何方法的抽象类别,根据当时描述的主题特性,可以 的话会将之换为介面,在语义上会较符合Java语言的特性,但是您要知道的是,介面与完全没有实作任何方法的抽象类别在某些时候是可以互换的。

在这边所看到的  UML  图都是使用  Jude  绘制的,Jude 是一个纯 Java 撰写的 UML 工具程式,可运行与 Windows、Linux 等多个平台,体积小,使用简易。


Gof 模式
    以下的设计模式则是我个人从 Gof 学习中的个人体会与实作,并增加几个导入或衍生的简单模式。
  • Creational 模式
物件的产生需要消耗系统资源,所以如何有效率的产生、管理 与操作物件,一直都是值得讨论的课题, Creational 模式即与物件的建立相关,在这个分类下的模式给出了一些指导原则及设计的方向。

  • Structural 模式
如何设计物件之间的静态结构,如何完成物件之间的继承、实 现与依赖关系,这关乎着系统设计出来是否健壮(robust):像是易懂、易维护、易修改、耦合度低等等议题。Structural 模式正如其名,其分类下的模式给出了在不同场合下所适用的各种物件关系结构。

  • Behavioral 模式
物件之间的合作行为构成了程式最终的行为,物件之间若有设 计良好的行为互动,不仅使得程式执行时更有效率,更可以让物件的职责更为清晰、整个程式的动态结构(像是物件调度)更有弹性。

多执行绪模式
    在很多应用中都会使用多执行绪,尤其是在Web应用中,多执行绪以 Gof 整理的模式为基础,考量多执行绪环境中,如何组合这些基本模式来完成多执行绪安全要求。


参考资料
    以下是以Java实作设计模式的介绍网站,从下面的连结开始,当中您可以找到更多设计模式的资源。


内容来自:http://www.riabook.cn/doc/designpattern/




Head First Design Pattern《深入浅出设计模式》读书笔记 Chapter 01 Intro to Design Patterns 第01章 设计模式入门   1. Design Principle Identify the aspects of your application that vary and separate them from what stays the same.  (P9) 设计原则:找出应用中可能需要变化之处,把它们独立出 阅读详情

相关推荐

东方财富 vs 新浪 vs AKShare:3 种股票实时数据接口性能与稳定性实测对比

本文深度评测了东方财富、新浪和AKShare三种股票实时数据接口的性能与稳定性。通过实际测试数据,从延迟、成功率和数据完整性三个维度进行全面对比,为量化交易和数据分析开发者提供选型参考。结果显示,东方财富接口在实时性和稳定性方面表现最优,适合高频交易场景。

weixin_30800807的博客 385

《设计模式Design Pattern》读书笔记之十八

《设计模式Design Pattern》读书笔记之十八State模式结构 目的当一个对象(context)根据当前本身的状态(state),会产生不同的行为的时候,可以采用state模式。把所有跟改状态相关的行为/动作转移到一个外部的state对象中。这样,可以避免context内部大量的switch.if等判断。 优缺点带来更大的灵活性和可维护性,因为一个新的状态可以很容易地通过派生一个类来追加

Jadyleung的专栏 1638

Starlink第三代终端与第二代终端的差异分析

SpaceX星链第三代终端实现显著升级,硬件售价维持599美元不变但性能全面提升。相比第二代产品,第三代终端取消自动调节电机改为手动定向,防水防尘等级提升至IP67,天线面积扩大46%,支持235台设备连接(提升87%),下载速度可达1Gbps(提升4倍),延迟降至20ms以下。新增3个千兆接口和WiFi6支持,同时推出199美元单独路由器选项。这些改进使第三代终端在保持价格优势的同时,更好地满足户外、移动和商业场景需求,标志着SpaceX卫星互联网服务从亏损销售转向盈利模式的重要转折。

通信行业老兵、物联网从业者,做一个有趣的普通人。 3028

《设计模式Design Pattern》读书笔记之十六

《设计模式Design Pattern》读书笔记之十六Memento模式结构 目的为了可以把一个对象恢复到以前的状态,却不想公开内部状态使得封装性被破坏。 优点1,  通过把originator的内部状态保存到memento,而不是直接把内部状态公开,保持了originator的封装性。因为memento有两种接口,宽(wide)的接口只会被originator使用,使得别人不能访问这些内部状态。

Jadyleung的专栏 1385

IMU660RA姿态解算实战:从传感器滤波到欧拉角输出的完整实现

本文详细介绍了IMU660RA姿态解算的完整实现过程,从传感器滤波到欧拉角输出。通过实战案例和代码示例,展示了如何有效处理陀螺仪和加速度计的噪声问题,并选择合适的算法进行数据融合和姿态解算。特别强调了欧拉角输出中的坐标系对齐和动态补偿技巧,帮助工程师快速掌握IMU660RA的应用。

weixin_42524762的博客 386

电源完整性之Cadence Sigrity Power DC_IR_Drop仿真

之前和大家分享过电源完整性之仿真设计原理链接: link.今天接着上一篇文章总结一下电源直流压降的的仿真操作流程及一些simulation中的设置参数,用到的时候Cadence Sigrity 中的Power DC组件,下面开始享受仿真的快乐吧: 1.仿真模式选择与文件导入 选择Cadence Sigrity下的Power DC组件,然后先择licence,最后就可以打开我们之前转化好的.SPD文件。操作如下图: 2.设置层叠信息和过孔焊盘参数 层叠信息:每层的介质厚度、材料、介电常数、介质损耗角等,如

刘小同学的博客 1万+

《设计模式Design Pattern》读书笔记之十

《设计模式Design Pattern》读书笔记之十Facade模式结构 目的为一个复杂的子系统(sub-system)提供一个简单的接口,可以满足大部分用户的要求,这样可以简化用户对该子系统的理解和使用,也可以降低各个自系统之间的耦合度。只有极少部分用户需要绕过Façade,直接使用子系统的各个组成部分。  参考资料《Design Pattern》  Gang-Of-4  1997

Jadyleung的专栏 1322

计算机网络-自顶向下方法 第三章课后习题答案(第七版)

复习题 R1. a) 就叫这个协议为简单传输协议STP(Simple Transport Protocol)。在发送方,STP从发送进程接收不超过1196字节的数据块、目标主机地址和目标端口号。STP向每个块添加一个4字节的头,并将目标进程的端口号放在头中。STP然后将目标主机地址和结果段提供给网络层。网络层将段交付给目的地主机的STP。目的主机基于STP检查段中的端口号,从段中提取数据,并将数据传递给由端口号标识的进程。 b) 在发送方,STP从发送进程接收不超过1192字节的数据块、目标主机地址和目标端

Erekilu的博客 2万+

《设计模式Design Pattern》读书笔记之一

     《设计模式Design Pattern》读书笔记之一      本书所使用到的符号(Guide To Notation) 《Design Pattern》这本书虽然有时候也使用一些非正式的图来表明自己的思想,但在设计模式中表示类/对象之间的关系时,使用规范的图。可能我的书版本比较老一些的缘故?它使用的图并不是基于UML,而是基于UML的前身。类图(class diagram)、对象图(o

Jadyleung的专栏 1924

hwasan实例分析踩内存之七:CamX进程chifeature2base怪异的Cause: use-after-free

摘要:本文分析了高通camx进程中的指针异常crash问题,通过构建hwasan版本确认存在内存踩踏现象。日志显示为"use-after-free"类型错误,具体为线程T175672在已释放内存区域执行写入操作。堆栈分析表明ChiFeature2Base::PipelineDestroyCb()函数访问了已被ChiFeature2Base::DestroyFeatureData()释放的pPipelineData对象。该问题源于多线程环境下内存管理不同步,导致释放后仍被引用。解决方案通过

1073

结构光相移法-多频外差原理与实践

结构光相移法是一种常用的三维形貌测量技术,它通过对投射到目标物体上的结构光进行相位调制和解调,实现对物体表面的三维重建。其中,多频外差原理是结构光相移法的核心原理之一,通过使用不同频率的结构光来实现相位测量,并可以提高测量精度和抗干扰性能。结构光相移法的多频外差原理是一种常用的三维形貌测量技术,它通过使用多个不同频率的结构光进行相位调制和解调,实现对物体表面的三维重建。本文介绍了多频外差原理的原理和实践应用,并提供了相应的Python源代码,希望对读者理解和应用结构光相移法有所帮助。

CodeByte的博客 737

《设计模式Design Pattern》读书笔记之十七

《设计模式Design Pattern》读书笔记之十七Observer模式结构 目的在一个一对多(one-to-many)的关系中,当一个对象(one)的状态被更新的时候,它的所有的相关对象(many)都会被得到通知。 讨论1,  可能会带来很大的状态更新成本,subject的一个很小的状态更新都可能使得大量的observer进行相应的更新。更为严重的是,如果subject不提供是什么状态被更新了

Jadyleung的专栏 1450

A-Frame引擎开发:A-Frame基础入门_(11).A-Frame物理引擎集成

在上一节中,我们学习了如何在A-Frame中创建基本的3D场景和交互元素。然而,为了使虚拟现实游戏更具真实感和互动性,物理引擎的集成是必不可少的。物理引擎可以模拟现实世界中的物理行为,如重力、碰撞、摩擦等,从而增强用户的沉浸感。物理引擎在虚拟现实游戏中的重要性不言而喻。它不仅能够模拟物体的运动和相互作用,还能为游戏提供更真实的反馈和体验。例如,当玩家在虚拟世界中推动一个物体时,物理引擎可以确保物体按照预期的方式移动,而不是简单地穿墙而过或突然消失。重力是物理引擎中最基本的特性之一。在A-Frame中,我们可

chenlz2007的博客 795

《设计模式Design Pattern》读书笔记之九

《设计模式Design Pattern》读书笔记之九Decorator模式结构 目的动态地给一个对象增加功能(responsibilities)。 讨论1, 给一个对象增加功能,最简单的方法是派生一个类;但这是一种静态的方法,不灵活。而Decorator是一种动态的方法,比较灵活。2, 对于一个轻量型的component,Decorator模式是一种比较好的方法,但如果component是重量型的

Jadyleung的专栏 1341

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

OV9734 DATASHEET,完整规格书

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

《设计模式Design Pattern》读书笔记之八

《设计模式Design Pattern》读书笔记之八Composite模式目的在一个part-whole的继承结构中,把整体(composition)和个体(object,component) 统一地对待。这样,对client来说,不用区别是整体还是个体,都可以进行同样的操作。 结构 讨论1, 一个缺点是给限制composite中的component带来困难。2, 有时候增加一个parent re

Jadyleung的专栏 1235

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

《设计模式Design Pattern》读书笔记之十五

《设计模式Design Pattern》读书笔记之十五Mediator模式结构 目的为了减少大量的对象(colleague)之间互相通信的复杂性,创建一个中间人--mediator(类似于HUB);这样,各个colleague只要建立跟mediator之间的联系,而不需要直接跟各个colleague直接连接。各个colleague之间的通信完全通过mediator进行处理。 优点1,  Media

Jadyleung的专栏 1500

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

《设计模式Design Pattern》读书笔记之二十

《设计模式Design Pattern》读书笔记之二十Template Method模式结构 目的在父类定义一个算法的框架,而可以让改算法中的每个步骤在子类中实现。这样,子类可以随意修改算法中的某个具体步骤,但整个算法的结构没有发生改变。 讨论1,  PrimitiveOperation可以是纯虚函数;或者仅仅是一个虚拟函数,父类提供一个缺省的实现。2,  PrimitiveOperation可以

Jadyleung的专栏 1437

《设计模式Design Pattern》读书笔记之七

《设计模式Design Pattern》读书笔记之七Bridge模式别名Handle/Body 结构  目的在接口(interface/abstraction)与实现(implementation)之间,建立一条桥梁。从而使得,1,  很容易地为该接口提供不同的实现2,  接口可以很容易被扩展(派生)而与具体实现不相关 与其他模式的联系和区别1, Abstract Factory可以用于创建Bri

Jadyleung的专栏 1270

《设计模式Design Pattern》读书笔记之十三

《设计模式Design Pattern》读书笔记之十三Chain of Responsibility模式结构 目的通过解除消息/请求(request)的发送者与接收者之间的绑定,允许request在一个对象链条中传递,增加request处理的灵活性。当然,一个不可避免的可能性是,该request可能在对象链条中传递到最后都没有被处理。 讨论1, 对于successor;如果没问题的话,可以利用现有

Jadyleung的专栏 1241

《设计模式Design Pattern》读书笔记之十一

《设计模式Design Pattern》读书笔记之十一Proxy模式结构 目的当访问一个对象花费比较大的时候,可以为它生成一个代理(proxy)。 应用remote proxy    远程代理,用本地的一个对象代理远程对象virtual proxy    虚拟代理,只有在需要的时候(on demand)才生成一个代价昂贵的对象protection proxy 保护代理,控制对对象的访问权限smar

Jadyleung的专栏 1426

《设计模式Design Pattern》读书笔记之十九

《设计模式Design Pattern》读书笔记之十九Strategy模式结构 目的当一个对象的某个/某些行为有多种算法的时候,不是通过内部的switch/if等方法,也不是通过派生子类的方法,而是把算法放到一个个单独的对象(有共同的接口)里面。这样,算法的切换只要更换相应的算法对象就可以,达到很大的灵活性。 讨论1,  Strategy可以有层次继承结构,达到把共同的算法统一提取出来的目的。2,

Jadyleung的专栏 1422

《设计模式Design Pattern》读书笔记之十二

《设计模式Design Pattern》读书笔记之十二Flyweight模式结构 目的通过共享对象,减少存储空间的消耗 讨论一个对象的状态可以分为内部状态(intrinsic state)和外部状态(extrinsic state)。内部状态是独立于上下文(context)的,外部状态因context而不同。通过把外部状态分离出去,只保存内部状态的对象就是一个flyweight,flyweight

Jadyleung的专栏 1369

《设计模式Design Pattern》读书笔记之十四

《设计模式Design Pattern》读书笔记之十四Command模式结构 目的Command对象建立了命令发出者(invoker)与接收者(receiver)之间的联系。从而,invoker不需要知道谁是receiver,它只管向command发出execute()的请求,command自动告诉receiver进行相应的处理。 讨论1,  如果command需要undo/redo操作,那么需要

Jadyleung的专栏 1492

《设计模式Design Pattern》读书笔记之二

            《设计模式Design Pattern》读书笔记之二             Abstract Factory模式 别名 Kit 结构 优点1, 通过仅仅将接口提供给Client,使得Client与接口的实现隔离开来,从而Client无需考虑接口的具体实现。 2, 使得更换产品系列(Product Families)更加便捷,仅仅需要替换一个ConcreteFactory的

Jadyleung的专栏 1711

《设计模式Design Pattern》读书笔记之二十一

《设计模式Design Pattern》读书笔记之二十一Visitor模式结构 目的当一个对象(node)结构相对固定的时候,通过创建一个一个visitor对象来对这个结构中的所有node进行访问;而不是在各个node中创建一个一个成员函数;这样,该node结构不需要改变,可以随意增加visitor对象来增加对node结构的不同访问动作。 讨论1,  如果node经常修改(增加/减少等),visi

Jadyleung的专栏 1410

设计模式学习笔记

保证某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。通过一个工厂类来集中管理对象的创建逻辑,客户端无需直接实例化具体类,实现对象创建与使用的解耦。简单工厂模式是工厂模式的一种。定义了一个创建对象的抽象方法,由子类决定要实例化的类。将对象的实例化推迟到子类。每个子类都可以实现工厂接口以提供具体的对象实例化过程提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式允许客户端在不指定具体类的情况下,创建一系列的产品对象。

陈暗暗的博客 1149
上一篇: 一道经典概率问题
下一篇: 2013年微软智在未来暑期实习生招聘部分考题
静水若流深
博客等级 码龄14年 5粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值