大话设计模式

《大话设计模式》笔记 “策略模式还有些什么优点? 阅读详情

大话设计模式


工作已然2年,回想过去,不堪入目,现在依然记得第一段代码,是copy来的,而且是巨垃圾的代码,以至于养成了不好的习惯,经过一年的工作,觉得自己不应该如此下去,因此开始了java工程师的成长之路:疯狂看书,而这些书应该是一开始工作就好好读的,无奈第一份工作根本没有培养环境;当然如果能一毕业就进入alibaba,腾讯,网易,百度等一众互联网大佬公司,也是要靠自己的,哈哈!

当然本书的叙述模式还是很轻松幽默的,只是笔记中需要记录一下example,以备复习,提炼水平。

简单工厂模式

这里举了一个面试的例子,例子中A去笔试,回答一个计算器程序的问题。一开始自然是一锅端的写在了一起的,如下:



这应该是刚毕业的大学生的答案,只是单纯的回答问题,没有考虑其他;可想而知,面试官想要的答案并不是这样。

下面的例子是针对代码规范修改的。


这应该是最表面的优化了吧,其实就被除数为0这个梗,我都没有一直铭记,总是出错了才去改;其次就是代码规范,好的代码需要好的代码规范,不然维护的成本很大,就好比英国人读懂中国人的思维一样,本人在刚工作的时候也没有很注意,不过还好年轻不怕失败!

下面是把业务和功能分离,使程序具有可维护,可扩展,可复用,灵活性好。这里就需要用到面向对象中封装,继承和多态的方法降低耦合度。

首先是是业务的封装:


接着是去耦合:



最后就是简单工程模式



附上UML的用法图,不多bb。

商场促销–策略模式

这里书中例举了一个商场打折促销模式的结账单软件。

首先是计算商品的总价格。文中的小菜就在类中直接计算了。

然后超市就有了打折这一个功能了。小菜这里就把打折的类型写死了,然后根据没中打折方式,计算最后的价格。这里就存在问题了,面对超市这种活动形式不确定的场所,这种方法是灾难性的,因为每次都需要更新硬件机器,以及后台服务。比如说,满300减50,积分制等等活动。

先看一下简单工厂模式:

面向对象的编程,并不是越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同的属性和功能的对象的抽象集合才是类。

UML图

再看一下策略模式:

UML图

来看一下策略模式的代码




显然这种策略模式是一种倒退,因为使得客户端要经常更改。

简单工厂模式和策略模式的融合



单一职责原则

如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。

考研求职两不误–开放-封闭原则

在我们最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象类来隔离以后发生的同类变化。

面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。

依赖倒转原则

一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而它察觉不出父类和子类对象的区别。

依赖倒转其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之就是过程化的设计了。

装饰模式

装饰模式UML

具体的实例代码:




装饰模式提供了一个非常好的解决方案,把每个要装饰的功能放在单独的类中,并让这个类包装它所需要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地,按顺序地使用装饰功能包装对象了。

代理模式

UML图

工厂方法模式

计算器的工厂模式

简历复印–原型模式

深拷贝与浅拷贝

模板方法模式

迪米特法则

外观模式

建造者模式


观察者模式

观察者模式不足就是所有观察者的行为必须一致

事件委托

Java中需要利用反射实现委托类的开发

抽象工厂模式

状态模式

状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。




适配器模式

适配器模式主要应用于希望复用一些现存的类,但接口又与复用环境要求不一致的情况



适配器模式主要就是在双方都不太容易修改的时候再使用适配器模式适配,而不是一有不同就使用它。

备忘录模式





Memento封装了要保存的细节。更改细节也不影响客户端。

备忘录模式适用于功能比较复杂的,但需要维护或记录属性历史的类。

组合模式






应用在此类整体与部分可以一致对待的问题

迭代器模式

迭代器(Iterator)模式就死分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。

单例模式




多线程访问时涉及锁的问题–双重锁定。

桥接模式



桥接模式UML




实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。

命令模式






职责链模式


实例





中介者模式

首先来看一下中介者模式的实例:联合国


代理之后






中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合。

享元模式

内部状态与外部状态




如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑使用;还有就是对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。

解释器模式




当有一个语言需要解释执行,并且你可以将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。

访问者模式

实例:









访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。

本书总结

暂未更新

大话设计模式(带目录完整版).pdf 《大话设计模式》是2007年12月清华大学出版社出版的图书,作者是程杰。本书中以情景对话的形式,用多个小故事或编程示例来组织讲解GoF总结的23个设计模式。 本书共分为29章。其中,第1、3、4、5章着重讲解了面向对象的意义、好处以及几个重要的设计原则;第2章,以及第6到第28章详细讲解了23个设计模式;第29章是对设计模式的全面总结。附录部分是通过一个例子的演变为初学者介绍了面向对象的基本概念。本书的特色是通过小菜与大鸟的趣味问答,在讲解程序的不断重构和演变过程中,把设计模式的学习门槛降低,让初学者可以更加容易地理解——为什么这样设计才是好的?是怎样想到这样设计的?以达到不但授之以“鱼”,还授之以“渔”的目的。引导读者体会设计演变过程中蕴藏的大智慧。 立即下载

相关推荐

大话设计模式总结.pdf

大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf

《大话设计模式》导图总结

大话设计是一本很有意思的书,就像这本书说的那样:设计模式的趣味解读,面向对象的深入剖析。通过学习这本书真是在诙谐与温馨中做了一次面向对象编程思想的体操。通过学习对设计模式还有五大设计原则有了一些很多的接触,学到了很多知识,但是学习的速度明显有些慢了,进度还是要赶的,奋起。        导图总结嘛,所以上完导图就不废话了。         共同交流,多多指教(*^__^*)

天生我材必有用,千金散尽还复来。 892

如何浏览与下载全球免费的地图高分辨率(亚米级)的遥感影像?

前言 如果你想使用商业卫星的高分辨遥感影像,一般价格昂贵。我们可以使用地图平台上免费的高分辨率数据。目前数据源很多,比如说google earth、天地图、四维地球、必应地图等等。这些影像统一有一个共同点就是:RGB三波段;Web地图瓦片服务。这意味着我们可以通过瓦片服务下载影像,但下载的影像只有三个波段,分别是 一.引言 二、可使用高分辨率的地图数据源 1.Google Earth影像 2.Esri World Image 3.天地图 4.必...

锐多宝的地理空间 2万+

大话设计模式 java_designpattern: 基于大话设计模式的java实现,由于本书只够入门,因此另外增加案例辅助理解,欢迎大家完善案例库(持续更新中)...

design pattern 参考《大话设计模式》(持续更新中)目录在支持md格式文件的软件中使用由于此书案例案例较简单,仅够入门,因此需要更多案例来不断加深对设计模式的理解,欢迎大家将工作中遇到的设计模式以案例、地址,甚至一句话来帮助大家共同学习。大家可以在各个设计模式的包下新建自己包来增加,共勉之!JDK并发包中AQS类就是一个模板方法应用 java.util.concurrent.locks...

weixin_32778881的博客 282

Win11上从零跑通Carla自动驾驶仿真:保姆级环境配置与避坑指南(Python 3.7+)

本文详细介绍了在Win11系统上从零配置Carla自动驾驶仿真环境的完整流程,包括Python 3.7+环境搭建、依赖安装、常见问题排查及性能优化技巧。通过保姆级教程帮助开发者快速避坑,实现稳定的自动驾驶仿真测试环境部署。

weixin_33488239的博客 421

Mixly/Arduino实战:WS2812点阵动态显示自定义图案与汉字

本文手把手教你使用Mixly和Arduino驱动WS2812点阵屏,实现自定义图案与汉字的动态显示。内容涵盖硬件连接、取模软件设置、高效数据处理技巧(巧用Excel)、Mixly图形化编程及Arduino代码解析,并深入探讨动态显示与滚动汉字原理,最后提供常见问题排查与性能优化心得,助你从零开始轻松玩转智能硬件。

weixin_29185199的博客 454

说说设计模式~大话目录(Design Pattern)

回到占占推荐博客索引 设计模式(Design pattern)与其它知识不同,它没有华丽的外表,没有吸引人的工具去实现,它是一种心法,一种内功,如果你希望在软件开发领域有一种新的突破,一个质的飞越,那么,设计模式应该是你的必修之路!设计模式可以提高软件的扩展性,代码的健壮性和重复利用性,设计模式是实现软件工程四大原则( 开闭原则, 里氏代换原则,依赖倒转原则,接口隔离原则)的前提和基础! 下面...

weixin_34162695的博客 128

802.1AS时间同步机制深度解析:从Sync报文到多域冗余设计

本文深度解析了802.1AS时间同步机制,从Sync与Follow_Up报文的核心交互原理入手,详细阐述了其如何通过精确的时钟频率比测量、链路延迟计算和驻留时间补偿来实现微秒乃至纳秒级同步。文章进一步探讨了802.1AS-2020版本引入的多时钟域冗余设计,为构建高可靠的车载TSN网络提供了关键见解和实战配置指南。

pytorch8learner的博客 460

大话PHP设计模式

大话PHP设计模式 一.魔术方法代码 PHP魔术方法的使用 1.__get/__set 2.__call/__callStatic 3.__toString 4.__invoke Object类中没有已下变量和函数 调用魔术方法样例: $objc = new Imooc\Object(); //调用Object中的 __set 方法 $objc->title = "a...

永远是死循环 195

AMD KFD的SDMA Packet 类型和定义解析

本文详细分析了AMD GPU架构中的SDMA(System Direct Memory Access)数据传输机制,重点介绍了其核心数据结构——SDMA Packet。SDMA通过8种主要Packet类型(包括内存拷贝、数据写入、屏障同步、中断触发等)实现高效主机-设备通信。每种Packet采用位域结构和联合体封装设计,在保证功能完整性的同时实现空间优化。这些Packet支持丰富的访问属性和扩展字段,适用于高性能数据搬运、内存初始化、任务同步、性能分析等场景,为GPU计算提供了灵活高效的数据传输解决方案。

图形/计算GPU的驱动与虚拟化技术分享园地 1253

【数据集总结】不透水面积ISA:GAIA、CLUD-Urban、GISA

【数据集总结】不透水面积ISA:GAIA、CLUD-Urban、GISA

WW、forever的博客 2158

大话设计模式——25设计模式汇总

一、写在最后的话 2年前就再学习设计模式了,但没有坚持下去,一直没有学完。虽然有加班比较多的原因,但更多的原因是下班后太累,懒得学习,自甘堕落。我为此感到羞愧,所以最近陆陆续续将剩下的设计模式全部学习完了。通过对《大话设计模式》这本书的学习,对设计模式有了初步的了解,希望以后能在项目实践中进一步的掌握。另外这本书其中一部分实例非常的好,强烈建议设计模式初学者学习! 二、目录 大话设计模式——01简单工厂模式 大话设计模式——02策略模式 ...

kuibuzhiqianli的博客 274

海思3403烧结、复用及mic输入

3403调试的第一步是版本烧结,版本烧结经常遇到问题,本文记录总结遇到的各种问题。

平面到立体 1354

读《大话设计模式》有感

读《大话设计模式》有感前言正文 前言 为响应 征文|@程序员,你读过的书,藏着自己的命运,特别写了这篇博客。也顺便给小伙伴们安利一本好书。 本博客主要是想向大家推荐一本设计模式的入门书:《大话设计模式》-程杰著 本博客的故事内容纯属虚构,希望大家不要介意。 正文 读一本好书,就像是和许多高尚的人谈话。 关于设计模式的话题,博主曾经向许多高尚的人取过经。他们都非常厉害,是这个领域的专家,和他们...

Andy's Blog 743

Xilinx系FPGA学习笔记(三)Vivado的仿真及ILA使用

接着学习vivado的使用方法。

贾saisai的博客 2546

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

大话设计模式系列目录

大话设计模式1:初识设计模式及设计模式五大基本原则

life is wonderful 5228

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

大话设计模式-第二夜

序又回来我们的大话设计模式,初夜只是一个引子,在之后的文章中将对23种设计模式进行说明,本人文笔有限,写不出高深的理论,只能写些大白话,之乎者也这类精英词就算了。回归正题,引出本文头号大屌丝——小菜。我们的屌丝选手小菜开场等级有点低,装备也不行,连一个计算机都没写好,作为强力的打后期,出门买个补刀斧还是要地。因此在我们第二夜就介绍这个补刀斧——简单工厂模式。

galiniur0u的博客 432

OV9734 DATASHEET,完整规格书

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

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

大话设计模式——总结

学完大话设计模式之后,总结了一下

锲而不舍 1336
上一篇: Java工程师的成长之路
下一篇: 深入理解JVM
伟大的华仔
博客等级 码龄9年 27粉丝 50原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值