设计模式开篇-不要滥用设计模式

【Java设计模式 - 专栏开篇简介】 java设计模式开篇 java设计模式开篇缘由计划设计模式简介设计模式适合人群 缘由 这还要从一次工作说起,平时也没怎么注意设计模式的使用,可能平时有使用到一些简单的设计模式,比如单例模式,策略模式,代理模式等等。那次是公司的一个需求,我按照自己常规的思路去解决:公司有一笔完整的数据,要对接给很多客户,但是不同客户所需要的数据不尽相同,都能在这个完整的数据里面得到,开始是两三个客户,倒没什么,都是按照常规的数据对接流程过去,到后来发现,其实他们之间有一些共同之处,貌似可以组合到一起,后面就用到了抽象工厂模式,将基础数据抽象化, 阅读详情

作者:阿修罗一平

链接:http://www.cnblogs.com/yiping06993010/archive/2006/10/18/532838.html

设计模式总结-不要滥用模式

从前年开始接触设计模式,一直都想深入设计模式的精髓,却都因为懒惰,再加上潜质不够(因为每次读完一个模式,都会有新的收获,而不能象金庸小说中的少侠,天资聪慧,绝世武功一遍搞定),还在继续努力着。 最开始读的是GOF的《设计模式:可复用面向对象软件的基础》,读到了一半,因为项目时间越来越紧张,每天晚上加班回去后就想睡觉。于是,书的下一半到现在几乎都是新的,一直都放在我的床头。后来,开始拜读阎宏老师的《java与模式》,新的项目也开始了,又因为惰性,看一会停一会,最终导致一个结果是:创建模式读了3遍,结构模式读了2遍,而行为模式只读了1遍。最近,改变了读书方式,感觉下来还不错。这次借blog开通之际,记录一下大师们的观点,让没有接触过的朋友了解一下,也许会有收获。不知道过几年后,看到这些,我会是什么心情呢?呵呵,也许还在努力着。

        我设想分几步走:第一步,因为《java与模式》我完整的看过,所以总结先以《java与模式》开始。第二步,读完《设计模式:可复用面向对象软件的基础》,然后进行总结;第三步,总结它们之间的区别。

     现在就从阎宏老师的《不要滥用模式》开始我的记录。

       从理论上将,面向对象的编程鼓励代码的复用,而设计模式本身是经过时间检验的设计方案,因此,应当说设计模式便是对成功的设计方案的复用。通过设计方案的复用,可以带动代码的复用,达到提高代码复用率的作用。但是所有的理论在应用到实践中的时候,都必须对具体问题做具体分析。

       随着设计模式越来越普及,又一种倾向也变得越来越明显,这就是没有经验的设计师对设计模式的盲目崇拜和过分的追求。这些设计师不是全力以赴地为它们所面临的问题找出最好的设计,而是将力气放在如何尽可能多和频繁地使用著名的模式。它们错误地认为,只要使用了这些设计模式,就可以保证一个设计方案是好的设计方案。因此,使用模式越多,设计就越好,这就导致了很多根本没有意义的设计。在这些设计里充斥着著名的设计模式,但是设计却和系统的需要严重脱节。

    要想恰到好处地在一个系统里面使用设计模式,必须做到一下几点:

   1、完全了解面临的问题,这就是说要完全了解具体情况。如果不完全了解所面临的问题,怎么能谈得上解决问题呢?

   2、完全了解模式,这就是说要十分懂得理论。如果不完全懂得所使用得理论,怎么能够正确地应用这一理论呢?

   3、非常了解怎样使用设计模式解决实际的问题,这就是说要将模式理论与具体系统需求情况相结合。如果设计师不知道一个设计模式怎样对系统设计有帮助的话,最好不要使用这个模式。不要只是因为想在简历上写设计模式方面的经验就盲目地使用模式。

    很多时候,也许大概知道模式的所解决的问题,知道模式模式的类图,我们都是为了用模式而使用模式,对于模式的不了解,不了解模式所要解决的问题,不了解模式的特点,不了解它们的适用范围,不了解它们之间的区别,造成了设计方案的失误。模式是用了一大堆,却没有得到应有的效果,代码的维护还是牵一发而动全身(夸张了啊)。这样使用模式,也许还不如不使用模式的效果,也许是对的。    

    好了,下班回去做饭了。

链接:http://www.cnblogs.com/yiping06993010/archive/2006/10/19/533970.html

设计模式总结-设计原则

 注:文章只是作为设计模式的总结,记录自己认为正确的观点。  如有不同观点,请指教。

      文章不是想说设计模式的重要性,更不是介绍设计原则,相关的文章太多了,在这里只是想给学习设计模式时没有在意设计原则的朋友提醒一下:在看模式的过程中,考虑一下设计原则在模式中的体现。因为,我有过这种失误。

      曾经在一次面试中,有一位负责人问我:你都了解哪些设计模式?呵呵,我不禁要笑了。

      也许有些人更多的关注的是如何正确地运用这23种设计模式做出优秀的系统设计。面对上面的问题,不同的人有不同的理解,有的人会认为,你连23种设计模式都不清楚,谈什么系统设计。也有人会认为,设计模式包含的不仅包含这23种,还包括了更深层次的设计思想。

      在这里,我们想知道的是是否了解的模式数量越多,就越能体现设计能力?如果在这23种设计模式中,没有哪一个模式适合用于解决所遇到的问题,那我们该怎么办,是否就是随意设计呢?我就只会用这23种设计模式,而且用的很活,是不是就达到了设计师的水平?说到这里,一堆砖头扔过来,别急,我和大家的答案是一致的。随着不断的接触,有一天一不小心,被23种设计模式扔出来,我突然发现,设计模式最根本的是设计原则,每一个设计模式,都是这些设计原则在解决某一具体问题的表现和应用;不仅要掌握23种设计模式及其应用,更要理解设计原则以及这些设计原则在23种设计模式中的应用。所以,不论是在使用已有的设计模式的时候,还是在面对设计模式都无法解决问题的时候,是否都应该想想设计原则呢。
    
      以下列出一些设计原则,也许与其他参考书有出处,不过理解就好。

      “开-闭”原则
        一个软件实体应当对扩展开放,对修改关闭。当需求改变时我们可以对模块进行扩展,使其具有新的功能对更改是封闭的,对模块扩展时,不需要改动原来的代码面对抽象而不是面对细节,抽象比细节活的更长僵化的设计——如果程序中一处改动产生连锁反应。

      
       里氏代换原则
       任何积累可以出现的地方,子类一定可以出现。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤是抽象化,而积累与子类的继承关系就是抽象化的具体体现,所以里氏代换原则是对实现抽象化的具体步骤的规范。


        依赖倒转原则
        要依赖于抽象,不要依赖于实现。看上去依赖倒转原则与“开-闭”原则有很大的相似指出,实际上,它们之间的关系是目标和手段之间的关系。“开-闭”原则是目标,而达到这一目标的手段是依赖倒转原则。

        合成/聚合复用原则
        要尽量使用合成/聚合,而不是集成关系达到复用的目的。显然,合成/聚合复用原则使与里氏代换原则相辅相成的,两者又都是对实现“开-闭”原则具体步骤的规范。前者要求设计师首先考虑合成/聚合关系,后者要求在使用集成关系时,必须确定这个关系是符合一定条件的。
      
         迪米特法则
         一个软件实体应当与尽可能少的其他实体发生相互作用。当一个系统面临功能扩展的时候,其中会有一些模块,它们需要修改的压力比其他一些模块要大。最后的结果可能是这些模块需要修改或者不需要修改。但是不论是哪种情况,如果这些模块是相对孤立的,那么它们就不会将修改的压力传递给其他的模块。

        接口隔离原则
        应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口。显然,接口隔离原则与广义的迪米特法则都是对一个软件实体与其他的软件实体的通信限制。广义的迪米特法则要求尽可能的限制通信的宽度和深度。接口隔离原则所限制的是通信的宽度,也就是说,通信应当尽可能地窄。显然,遵守接口隔离原则与迪米特法则,会使一个软件系统在功能扩展地过程种,不会将修改地压力传递到其他的对象。



ROS-Industrial :simple_message 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录1. 概述2. 协议(Protocol)3. HEADER解析3.1 MSG_TYPE3.2 COMM_TYPE3.3 REPLY CODE 1. 概述 Simple_Message是ROS-Industrial的一部分,定义了用于与工业机器人控制器通信的简单消息连接协议。另外还包括处理连接受限系统的处理器和管理器类。 2. 协议(Protocol) 简单消息(simplemessage)协议定义了ROS的驱动层和机器人控制器之. 阅读详情

相关推荐

LabVIEW与MySQL实时数据存储:传感器采集与数据库同步实践

本文详细介绍了如何将LabVIEW与MySQL结合,实现传感器数据的实时采集与高效存储。通过设计合理的数据库表结构、配置LabVIEW数据库连接工具包,并编写核心的采集与存储VI,构建了稳定可靠的数据链路。文章重点分享了批量插入、连接管理、时间同步等关键优化技巧与避坑指南,帮助工程师应对工业监控、环境监测等场景下的实时数据同步挑战。

weixin_29281915的博客 262

滥用模式;设计模式和直接了当之间的矛盾

一) 滥用模式  在 head first 设计模式中有这样一段对话:最少知识原则:只和你的密友交谈。问:还有另外一个原则叫做 Law of Demeter,它和最少知识原则之间有什么关系?答:其实这两个名词指的是同一个原则。我们倾向于使用最少知识原则来称呼它是因为以下两个原因:1)这个名字更直接。2)法则给人感觉是强制。事实上,没有任何原则是law,所有的原则都应

junglefly的学习工作纪录 1273

Ubuntu 22.04下Minkowski Engine编译避坑指南:解决Cuda 12.2与Pytorch cu118版本冲突

本文详细介绍了在Ubuntu 22.04系统中解决Minkowski Engine编译时Cuda 12.2与Pytorch cu118版本冲突的实用方法。通过修改版本检查逻辑、创建兼容符号链接等技巧,帮助开发者顺利完成编译,并提供了性能优化建议和替代方案,确保三维点云处理任务的高效运行。

weixin_42543309的博客 162

【深度好文】反模式:10种滥用设计模式案例分析

滥用设计模式,就像在没有正确诊断的情况下给病人开药一样,可能会带来一系列的问题和后果。增加复杂性:设计模式应该用来简化设计,但如果滥用,它们会使系统变得更加复杂和难以理解。这就像给一个简单的房子增加了不必要的装饰,最终导致维护成本上升。性能问题:一些设计模式,如代理模式或装饰器模式,可能会引入额外的间接层,这可能会影响系统的性能。就像在赛车上增加不必要的重量,会降低它的速度。代码膨胀:滥用设计模式可能导致项目中存在大量不必要的类和接口,从而导致代码膨胀。这就像是在图书馆里增加了过多的书架,而书籍却寥寥无几。

威哥爱编程,华为 HDE,鸿蒙极客、优快云博客专家、《鸿蒙 HarmonyOS 5/6 开发之路》系列图书第一作者 1177

eVTOL热管理:从电动车到飞行器的技术跃迁与工程挑战

热管理系统是保障各类电动设备安全、高效运行的核心技术,其基本原理是通过冷却、加热和温度控制,确保电池、电机等关键部件在最佳工况下工作。在新能源汽车领域,热管理技术已相对成熟,但面对eVTOL(电动垂直起降飞行器)这一新兴领域,其设计逻辑需从二维地面转向三维空域,应对环境温度剧烈变化、重量约束极端严苛等全新挑战。eVTOL的热管理不仅是简单的技术移植,更涉及对电池瞬时高功率散热、乘员舱快速温控及多热源耦合等复杂工程问题的系统性解决,直接关系到飞行安全与商业航程。本文聚焦于**环境温度**和**有效载荷**等关

weixin_42521276的博客 613

JS逆向-快手__NS_hxfalcon参数分析

现在快手H5接口都需要__NS_hxfalcon这个参数,这篇文章就是逆向这个参数

ckcookies的博客 4075

王争老师设计模式-工厂模式-上 我为什么说没事不要随便用工厂模式创建对象?

一般情况下,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。不过,在 GoF 的《设计模式》一书中,它将简单工厂模式看作是工厂方法模式的一种特例,所以工厂模式只被分成了工厂方法和抽象工厂两类。实际上,前面一种分类方法更加常见,所以,在今天的讲解中,我们沿用第一种分类方法。 在这三种细分的工厂模式中,简单工厂、工厂方法原理比较简单,在实际的项目中也比较常用。而抽象工厂的原理稍微复杂点...

cauchy1217的专栏 366

Abaqus数据导出技巧:轻松处理大量XY数据

通过上述三种方法,我们可以解决Abaqus中大量XY数据导出的问题。无论是使用插件、编写Python脚本,还是利用Abaqus的内置报告功能,都可以帮助我们高效地处理数据。希望这篇博客能够帮助到你,提高你在Abaqus使用过程中的数据处理效率。

m0_62153576的博客 1916

浅谈设计模式

设计模式是指在软件开发中,经过验证的,⽤于解决在特定环境下,重复出现的,特定问题的解决⽅案。个人认为,简单来说,就是套路。 设计模式不能滥用,如果没有明确的场景,就不要使用设计模式。在后面的了解可以知道,设计模式是需要有变化点和稳定点的,如果找不出稳定点或变化点,也不要使用。 模式设计原则 在讲解设计模式之前,要先了解模式设计的原则。这是因为,设计原则比设计模式更重要,设计模式是对设计原则的应用。所以,其实掌握了设计原则,设计模式的学习就会较为轻松。 当然,两者是相互印证的关系,而不是相互独立的,这一点需要

m0_65931372的博客 1323

【推荐100个unity插件之2】 DoTween动画插件的安装和使用整合(最全)

摘要:DOTween动画插件使用指南 DOTween是Unity中强大的动画插件,比原生动画更便捷。安装后需进行初始化设置,通过工具菜单生成程序集。主要提供通用方法(DOTween.To)和便捷方法(如transform.DOMove)两种动画实现方式。插件支持丰富的动画设置(循环、缓动等)和事件回调(OnComplete、OnKill)。还提供动画管理功能,包括清除(DOTween.Clear)、完成(DOTween.CompleteAll)和终止(DOTween.KillAll)动画。常用功能涵盖移动、

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

3、Tone Mapping色调映射(Advanced High Dynamic Range Imaging )

3、Tone Mapping色调映射(Advanced High Dynamic Range Imaging) 如今,大多数可用的显示设备无法本地显示HDR内容。 入门级显示器的对比度仅为200:1。 尽管高端液晶电视具有更高的对比度,但平均对比度约为10,000:1,但通常每个色彩通道的离散度为8位,很少为10位。 这意味着色调限制为255。在过去的二十年中,研究人员花费了大量时间和精力来压缩HDR图像和视频的范围,以便可以在LDR显示器上更“自然”地看到数据。 图3.1 色调映射和真实场景之间.

ISP行业的忠实粉丝 1866

滥用设计模式不如不用

引子: 想到这个话题,不得不吐槽一个亲身经历的故事要说设计模式,用的最多的莫过于java程序员,尤其是爱讲抽象和继承什么的,曾经有这样一个案例B类业务和C类 业务都会产生订单,然后B类业务和C类业务订单有某些共同字段,比如c1,c2 … …然后公司的老程序员是这样设计类的public class Common { } class B extends Common { }class C extend

woshiaotian的专栏 1270

RHCA III之路---EX436-1

由于ha这门课有大量命令需要在3个节点上同步执行.如果执行history会出现前面数字,复制多行会有些麻烦.lab环境是nodea,nodeb,nodec 考试环境是node1,node2,node3。就可以快速将历史命令实现可多行复制,当然也可以用awk进行分割,个人喜好随意。技巧只能加快答题速度,对考试得分帮助不大。确认3个红框内容一致,且没报错即可。再执行一个histrory。3个node节点上运行。这样就能1次复制3行。

Q先生 1002

DesignPattern设计模式

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

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

设计模式开篇

Java八股是程序员面试和进阶的必备技能。本专栏旨在每篇文章通过一个八股问题深入钻研,并引申出其相关联的知识点,方便记忆。本文是设计模式的开篇,先介绍一些设计模式的常规知识。

AkimotoManatsu的博客 596

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

一、设计模式-开篇—为什么我要去旅行? #和设计模式一起旅行#

独学而无友,则孤陋而寡闻。——《礼记·学记》 写在开篇,本篇是一个综合帖,里面可能会记录一些我的学习感受,也可能记录一些我学习的资料的说明,总之这就是一个大杂烩的博文。 开篇杂谈 最近学习一些技术之外的其他东西,怎么进行时间管理了,怎么坚持去做一件事情了,还是学到了一些其他的新的东西! 做一件事情最难的是什么,是启动!启动之后最难是什么,是坚持! 很多时候大的道理我们都懂,但...

阿飞云漫步 1347

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

gitblog_00568的博客 1057

设计模式DesignPattern【1】

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

2301_80272161的博客 1106

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

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

gitblog_00751的博客 819

DesignPattern 开源项目教程

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

gitblog_00406的博客 558

SingleTon单例模式请不要滥用

说到面向对象的设计模式,现在很多人都可以随便说出好几种常用的,但是有没有想过设计模式,即使是初学者也至少能说一下SingleTon和Factory Method这两个。那么,设计模式是不是随便怎么用都没问题哪? 这个问题从提问的方式上就可以看出,答案一定是否定的(大家也不是白白接受了这么多年的应试教育的)。 但是,就我个人的观察,滥用设计模式的绝对不是少数。而且越是简单的模式越会被滥用。 从最

dabian@1987 732

不要滥用OO

近期想把自己所做的任务的共用部分抽象出来,做成通用的基类。这样就能把不同数据集,不同模型集成到一个统一的框架中,提高开发效率,规范开发标准,提高代码可读性。 但是在设计其中一个数据集基类时遇到一个问题。 由于所有的数据集类都符合下面的流程:解析标注文件->解析数据文件。用户需要手动控制解析数据文件的时机,因此我想把解析标注文件的工作放到基类中。即基类有一个抽象方法parse_ann_file...

SilverBullet 549

设计模式总结-不要滥用模式

从前年开始接触设计模式,一直都想深入设计模式的精髓,却都因为懒惰,再加上潜质不够(因为每次读完一个模式,都会有新的收获,而不能象金庸小说中的少侠,天资聪慧,绝世武功一遍搞定),还在继续努力着。最开始读的是GOF的《设计模式:可复用面向对象软件的基础》,读到了一半,因为项目时间越来越紧张,每天晚上加班回去后就想睡觉。于是,书的下一半到现在几乎都是新的,一直都放在我的床头。后来,开始...

weixin_34368949的博客 192

设计模式之开篇(c++)

随着面向对象技术的发展和广泛应用,设计模式不再是一个新兴的名词,它已逐步成为系统架构人员、设计人员、分析人员以及程序开发人员所需掌握的基本技能之一。设计模式已广泛应用于面向对象的设计和开发,成为面向对象领域的一个重要组成部分。——《设计模式》 前言: 开创这一系列的原因是因为《设计模式》(刘伟,清华大学出版社)中的实例是用java实现的,由于本弱钟爱c++,所以打算将java翻译为c++的...

Sincky的博客 601

请不要滥用设计模式——SingleTon篇_转载

前言 说到面向对象的设计模式,现在很多人都可以随便说出好几种常用的,但是有没有想过设计模式,即使是初学者也至少能说一下SingleTon和Factory Method这两个。 那么,设计模式是不是随便怎么用都没问题哪? 这个问题从提问的方式上就可以看出,答案一定是否定的(大家也不是白白接受了这么多年的应试教育的)。 但是,就我个人的观察,滥用设...

diehuang2868的博客 122
上一篇: 常用的GUN二进制工具集
下一篇: 设计模式六大原则
早起的虫儿灬
博客等级 码龄10年 54粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值