首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

漫谈模式违反S.O.L.I.D设计原则示例

今天我们来看下违反设计原则示例。...违反OCP原则示例如果在一个类中使用了switch语句来判断不同情况,当需要添加一个新情况时,必须修改源代码,这是违反OCP。符合OCP原则示例那么为了满足开闭原则,需要怎么做呢?...那就要对系统采用抽象化设计。抽象化是开闭原则关键。这个示例遵循OCP原则,因为它将支付方式处理逻辑封装在不同实现了Payment接口类中。...里氏替换原则意图里氏代换原则(Liskov Substitution Principle LSP)面向对象设计基本原则之一。里氏代换原 则中说,任何基类可以出现地方,子类一定可以出现。...同时,我们也避免了实现不适用于某些实现类方法。依赖倒转原则意图面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类上层接口交互。

68460

设计模式设计原则

先来抛一个问题,设计模式到底有几个原则? 翻了三本书《设计模式之禅》、《设计模式:可复用面向对象软件元素》、《Head First 设计模式》,也看了不少博客和关于设计模式原则文章。...关于设计模式有几大原则,似乎没有严格定论,有的说6大设计原则,有的说7大设计原则,《Head First》中更是提到了9个设计原则。...其他设计原则整理 在《Head First 设计模式》一书中整理设计原则有: 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程 为交互对象之间松耦合设计而努力 类应该对扩展开放,对修改关闭...毕竟这些原则模式都是为了我们设计程序代码,实现某些功能服务,不是吗?.../sjms/201211023.asp#6 书籍: 《Head First 设计模式》 《设计模式 - 可复用面向对象软件元素》 《设计模式之禅》

74430
您找到你想要的搜索结果了吗?
是的
没有找到

回归设计模式本质:设计原则

作为开发人员,或多或少都会熟悉或了解一些设计模式,如单例模式、工厂模式、观察者模式等等。但并非都能理解这些设计模式背后本质,从而可能会导致对模式单纯套用或滥用情况出现。...不要为了模式模式,要明白使用模式目的,要正确理解模式背后设计原理,要理解背后基本设计原则。...设计原则 首先,我们要明白使用设计模式目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。...其次,要理解设计模式背后一些重要设计原则,所有设计模式基本都是基于这些设计原则总结出来,这才是设计模式本质和精髓所在。...很多设计模式都遵循了该原则,比如工厂类模式、观察者模式、适配器模式、策略模式等等。 在我们平时实际开发中,如果想提高代码可重用性、扩展性,那就应该尽量遵循该原则

45920

设计模式设计原则感悟生活

设计模式很多思想还是很有意思,刚毕业时候接触设计模式感觉有点高深,坐而论道,感觉还是有些虚,平时做小练习还能自己捣鼓一番,自己使用一下设计模式,然后大刀阔斧改动代码,随心所欲,写完以后还能热乎劲上来高兴几天...,时间长了就忘了很多东西,只是感觉设计模式就是抽象,自己感觉也抽象。...工作中以面向对象为目标,实际中做着结构化思路开发。 设计模式这几个原则自己是看了忘,忘了以后时间长了也忘了看了。如此恶性循环。...看别人总结原则描述很是详尽,但是看代码还是不够通俗,自己也来捣鼓一下,从自己思路和理解来总结总结设计模式和工作生活联系。...迪米特法则就是最少知道原则,只要言简意赅说明,那些实现细节等等就不需要过多牵扯了。

36730

你真的懂设计模式设计原则

毫无疑问,设计模式于己于他人于系统都是多赢设计模式使代码编制真正工程化,设计模式是软件工程基石,如同大厦一块块砖石一样。...他们所提出设计模式主要是基于以下面向对象设计原则。 对接口编程而不是对实现编程。优先使用对象组合而不是继承。 三、设计模式使用 设计模式在软件开发中两个主要用途。...当然,我们还会讨论另一类设计模式:J2EE 设计模式。 ? 五、设计模式之间关系 下面用一个图片来整体描述一下设计模式之间关系: ?...六、设计模式六大原则 1、开闭原则(Open Close Principle) 开闭原则意思是:对扩展开放,对修改关闭。在程序需要进行拓展时候,不能去修改原有的代码,实现一个热插拔效果。...2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则是面向对象设计基本原则之一。 里氏代换原则中说,任何基类可以出现地方,子类一定可以出现。

62230

设计模式之经典 SOLID 原则

设计模式是一套被反复使用、多数人知晓、经过分类编目的、代码设计经验总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。...毫无疑问,设计模式于己于他人于系统都是多赢设计模式使代码编制真正工程化,设计模式是软件工程基石,如同大厦一块块砖石一样。...项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应原理来与之对应,每种模式都描述了一个在我们周围不断重复发生问题,以及该问题核心解决方案,这也是设计模式能被广泛应用原因。...类职责是否设计得越单一越好? 单一职责原则通过避免设计大而全类,避免将不相关功能耦合在一起,来提高类内聚性。...很多设计原则设计思想、设计模式,都是以提高代码扩展性为最终目的。特别是 23 种经典设计模式,大部分都是为了解决代码扩展性问题而总结出来,都是以开闭原则为指导原则

33620

设计模式高级概念和原则

在软件工程中,设计模式是一套被广泛认可解决特定问题方法论。它们不仅仅是代码模板,更是软件设计最佳实践。理解这些高级概念和原则对于成为一名优秀软件架构师至关重要。...设计原则 SOLID 原则: 单一职责原则(SRP):一个类应该只有一个引起变化原因。 开闭原则(OCP):软件实体应当对扩展开放,对修改关闭。...里氏替换原则(LSP):子类对象应该能够替换其父类对象被使用。 接口隔离原则(ISP):不应该强迫客户依赖于它们不用方法。 依赖倒置原则(DIP):高层模块不应依赖低层模块,两者应依赖于抽象。...DRY(Don't Repeat Yourself):避免重复,每一片知识只应有一个单一、明确、权威表示。...KISS(Keep It Simple, Stupid):尽可能保持简单,避免不必要复杂性。 总结 掌握这些高级概念和原则对于软件开发质量和维护性有着不可估量影响。

12620

设计模式专题(一)——面向对象设计原则

设计模式专题(一)——面向对象设计原则 (原创内容,转载请注明来源,谢谢) 设计模式在程序中,主要服务于设计类、接口等,是以面向对象为基础,因此面向对象设计原则是各设计模式中都会考虑与体现。...本篇内容主要从全局角度讲述设计模式原则,具体每种设计模式实现,将在后续文章中逐个写明。 面向对象设计共有五大原则。...一、单一职责(SRP) 1、含义 单一职责主要满足两点内容:相同职责避免分散到多个类中;一个类中避免承担太多职责。 2、最明显体现单一职责设计模式主要是工厂模式和命令模式。...2、最明显体现接口隔离设计模式主要是策略模式和代理模式。...2、最明显体现接口隔离设计模式主要是装饰模式。 四、替换原则(LSP) 1、含义 替换原则要求:子类型必须能够替换父类型,并出现在父类型任何能出现地方。

1.2K120

系统架构设计原则模式

1 分层架构 分层架构是最常见架构,也被称为n层架构。多年以来,许多企业和公司都在他们项目中使用这种架构,它已经几乎成为事实标准,因此被大多数架构师、开发者和软件设计者所熟知。...分层架构中层次和组件是水平方向分层,每层扮演应用程序中特定角色。根据需求和软件复杂度,我们可以设计N层,但大多数应用程序使用3-4层。...分层架构是SOLID原则通用架构,当我们不确定哪种架构更合适时候,分层架构将是一个很好起点。我们需要注意防止架构陷入 污水池反模式 。...最重要概念是包含业务逻辑和处理流程服务组件(Service Component)。拿捏粒度设计服务组件是必要而具有挑战性工作。...跨服务组件代码冗余是完全正常。开发微服务时,为了受益于独立部署单元,以及更加容易部署,我们可以违反DRY原则。其中挑战来自服务组件之间契约,以及服务组件可用性。

1.2K70

设计模式前置课】软件设计原则

设计模式前置课】软件设计原则 设计模式 为啥要学设计模式 七大原则 1. 开闭原则 2. 里氏替换原则 3. 依赖倒置原则 4. 单一职责原则 5. 接口隔离原则 6. 最少知道原则 7....合成复用原则 最后BB两句 七大设计原则 设计模式-创建型模式 设计模式-结构性模式 设计模式-行为型模式 参考文章 ?...设计模式 学习设计模式之前,我们必须要知道 为什么要学习设计模式 设计模式能为我们解决什么 7 种设计原则是软件设计模式必须尽量遵循原则,各种原则要求侧重点不同 开闭原则 里氏替换原则...为啥要学设计模式 设计模式是一种经验总结,是前人总结提炼形成设计模式。 学习设计模式过程中,最重要是掌握其中设计思想 设计模式最重要思想是解耦。...最后BB两句 设计模式是一种思想,而软件设计七大原则就是设计思想基石 除了这七个设计原则 后面还有 创建型模式 结构性模式 行为型模式 三大类型模式 23 种 小类型 设计模式 后面有空会补上

46020

轻松学习设计模式之面向对象设计原则

在面向对象设计中,可维护性复用是以设计原则为基础。每一个原则都蕴含一些面向对象设计思想,可以从不同角度提升一个软件结构设计水平。...面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出指导性原则。...,导致DataTransfer变更 下载方式变更,导致 DataTransfer变更 这就违反了单一职责原则,所以需要将不同功能拆解成两个不同类,来负责各自职责,不过这个拆粒度可能因人而已...,该原则是面相对象设计最基本原则。...(); 4} 当我们用鲸鱼这个子对象替换原来基类鱼对象,鲸鱼在水里开始呼吸,这时问题就出现了,鲸鱼是哺乳动物,在水里呼吸是没法呼吸,一直在水里就GG思密达了,所以这违反了该原则,我们就可以判断鲸鱼继承于鱼类不合理

45430

设计模式学习--面向对象5条设计原则之依赖倒置原则--DIP

高层模块包含了一个应该程序中重要策略选择和业务模型,正是这些高层模块才使得其所有的应用程序区别于其他,如果高层依赖于低层,那么对低层模块改动就会直接影响到高层模块,从而迫使它们依次做出改动。...优点:ToggleSwitch依赖于抽象类Light,具有更高稳定性,而BulbLight与TubeLight继承自Light,可以根据"开放-封闭"原则进行扩展。...只要Light不发生变化,BulbLight与TubeLight变化就不会波及ToggleSwitch。 缺点:如果用ToggleSwitch控制一台电视就很困难了。...三、DIP优点: 使用传统过程化程序设计所创建依赖关系,策略依赖于细节,这是糟糕,因为策略受到细节改变影响。依赖倒置原则使细节和策略都依赖于抽象,抽象稳定性决定了系统稳定性。...四、启发式规则: 1、任何变量都不应该持有一个指向具体类指针或者引用 2、任何类都不应该从具体类派生(始于抽象,来自具体) 3、任何方法都不应该覆写它任何基类中已经实现了方法

85880

设计模式六大原则-设计模式学习(二)

设计模式六大原则 开闭原则(Open Close Principle) 对扩展开放,对修改关闭。在程序需要进行拓展时,无需去修改原有代码,可实现一个热插拔效果。...里氏替换原则(Liskov Substitution Principle) 里氏替换是面向对象设计基本原则之一,任何基类可以出现地方,子类一定可以出现。...LSP是对开闭原则补充,实现OCP关键步骤就是抽象化,而基类与子类继承关系就是抽象化具体实现,LSP是对实现抽象化具体步骤规范 依赖倒转原则(Dependence Inversion...Principle) DIP是开闭原则基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体 接口隔离原则(Interface Segregation Principle) 使用多个隔离接口...其实设计模式就是从大型软件架构出发、便于升级和维护软件设计思想,强调降低依赖,降低耦合。

31120

设计模式学习--面向对象5条设计原则之开放封闭原则--OCP

软件实体应当对扩展开放,对修改关闭,即软件实体应当在不修改(在.Net当中可能通过代理模式来达到这个目的)前提下扩展。...如果我们在设计这个类时候坚持了OCP的话,把工资税公共方法抽象出来做成一个接口,封闭修改,在客户端(使用该接口类对象)只依赖这个接口来实现对自己所需要工资税,以后如果系统需要增加新工资税,只要扩展一个具体国家工资税实现我们先前定义接口...,而不会影响其它部分; 四、使用OCP注意点: 1、实现OCP原则关键是抽象; 2、两种安全实现开闭原则设计模式是:Strategy pattern(策略模式),Template Methord...(模版方法模式); 3、依据开闭原则,我们尽量不要修改类,只扩展类,但在有些情况下会出现一些比较怪异状况,这时可以采用几个类进行组合来完成; 4、将可能发生变化部分封装成一个对象,如: 状态, 消息...对于行为,如果是基本不变,则可以直接作为对象方法,否则考虑抽象或者封装这些行为; 5、在许多方面,OCP是面向对象设计核心所在。

70980

设计模式学习--面向对象5条设计原则之Liskov替换原则--LSP

,但依然这个设计扩展性不好,运行期绑定没有实现。...我们知道,在我们大多数模式中,我们都有一个共同接口,然后子类和扩展类都去实现该接口。...2、实现运行期内绑定,即保证了面向对象多态性顺利进行。这节省了大量代码重复或冗余。避免了类似instanceof这样语句,或者getClass()这样语句,这些语句是面向对象所忌讳。...契约式编程有利于系统分析和设计,指我们在分析和设计时候,定义好系统接口,然后再编码时候实现这些接口即可。在父类里定义好子类需要实现功能,而子类只要实现这些功能即可。...4、派生类退化函数:派生类某些函数退化(变得没有用处),Base使用者不知道不能调用f,会导致替换违规。在派生类中存在退化函数并不总是表示违反了LSP,但是当存在这种情况时,应该引起注意。

67350

设计模式学习--面向对象5条设计原则之接口隔离原则--ISP

一、ISP简介(ISP--Interface Segregation Principle): 使用多个专门接口比使用单一总接口要好。 一个类对另外一个类依赖性应当是建立在最小接口上。...一个接口代表一个角色,不应当将不同角色都交给一个接口。没有关系接口合并在一起,形成一个臃肿大接口,这是对角色和接口污染。 “不应该强迫客户依赖于它们不用方法。...接口属于客户,不属于它所在类层次结构。”这个说得很明白了,再通俗点说,不要强迫客户使用它们不用方法,如果强迫用户使用它们不使用方法,那么这些客户就会面临由于这些不使用方法改变所带来改变。...二、举例说明: 参考下图设计,在这个设计里,取款、存款、转帐都使用一个通用界面接口,也就是说,每一个类都被强迫依赖了另两个类接口方法,那么每个类有可能因为另外两个类方法(跟自己无关)而被影响。...参考下图设计,为每个类都单独设计专门操作接口,使得它们只依赖于它们关系方法,这样就不会互相影了! ? 三、实现方法: 1、使用委托分离接口 2、使用多重继承分离接口

72680

设计模式学习--面向对象5条设计原则之单一职责原则--SRP

所谓职责,我们可以理解他为功能,就是设计这个类功能应该只有一个,而不是两个或更多。也可以理解为引用变化原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑撤分这个类了。...因为职责是变化一个轴线,当需求变化时,该变化会反映类职责变化。 “就像一个人身兼数职,而这些事情相互关联不大,,甚至有冲突,那他就无法很好解决这些职责,应该分到不同的人身上去做才对。”...二、举例说明: 违反SRP原则代码:  modem接口明显具有两个职责:连接管理和数据通讯; interface Modem {     public void dial(string pno);    ...,应该仅有一个引起它变化原因,即单一职责;  2、在没有变化征兆情况下应用SRP或其他原则是不明智;  3、在需求实际发生变化时就应该应用SRP等原则来重构代码;  4、使用测试驱动开发会迫使我们在设计出现臭味之前分离不合理代码...;  5、如果测试不能迫使职责分离,僵化性和脆弱性臭味会变得很强烈,那就应该用Facade或Proxy模式对代码重构;

754100

实践GoF23种设计模式:SOLID原则

学习设计模式最高境界是吃透它们本质思想,可以做到即使已经忘掉某个设计模式名称和结构,也能在解决特定问题时信手拈来。设计模式背后本质思想,就是我们熟知SOLID原则。...如果把设计模式类比为武侠世界里武功招式,那么SOLID原则就是内功内力。通常来说,先把内功练好,再来学习招式,会达到事半功倍效果。因此,在介绍设计模式之前,很有必要先介绍一下SOLID原则。...如果实在无法判断/预测,那就等变化发生时再拆分,避免过度设计。...OCP:开闭原则 开闭原则(The Open-Close Principle,OCP)中,“”指的是对扩展开放,“”指的是对修改封闭,它完整解释为: A software artifact should...最后 本文花了很长篇幅讨论了23种设计模式背后核心思想 —— SOLID原则,它能指导我们设计出高内聚、低耦合软件系统。

1K40

设计模式六大原则

1 开闭原则 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。在软件生命周期内,因变化、升级和维护对原有代码进行修改,可能会引入错误。...所以当软件需要变化时,通过扩展软件实体行为来实现变化,而不是修改原有代码。 2 里氏代换原则 任何基类可以出现地方,子类一定可以出现。...里氏代换原则是继承复用基石,只有当衍生类可以替换掉基类,软件单位功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类基础上增加新行为。里氏代换原则是对“-原则补充。...实现“-原则关键步骤就是抽象化。而基类与子类继承关系就是抽象化具体实现,所以里氏代换原则是对实现抽象化具体步骤规范。通俗说就是:子类可以扩展父类功能,但不能改变父类原有的功能。...通俗说:多用抽象接口来描述相同动作,降低实现这个动作的人和物之间耦合度。 5 接口隔离原则 客户端不应该依赖它不需要接口;一个类对另一个类依赖应该建立在最小接口上。

64031
领券