首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏国产程序员

    面向对象的7设计原则(7)-开闭原则

    开闭原则 开闭原则是面向对象世界里最基础的设计原则,它指导我们如何建立一个稳定,灵活,可扩展的系统。 开闭原则告诉我们应尽量通过扩展软件实体的行为来实现变化,而不是通过修改现有代码来完成变化,它是为软件实体的未来事件而制定的对现行开发设计进行约束的一个原则。 为什么使用开闭原则 第一:开闭原则非常有名,只要是面向对象编程,在开发时都会强调开闭原则 第二:开闭原则是最基础的设计原则,其它的五个设计原则都是开闭原则的具体形态,也就是说其它的五个设计原则是指导设计的工具和方法 第三:开闭原则可以提高复用性 在面向对象的设计中,所有的逻辑都是从原子逻辑组合而来,而不是在一个类中独立实现一套业务逻辑。只有这样的代码才可以复用,逻辑粒度越小,被复用的可能性越大。 设计者需要缩小逻辑粒度,直到一个逻辑不可以分为止。

    62310发布于 2020-08-27
  • 来自专栏一个会写诗的程序员的博客

    7 大程序设计原则

    很多大牛,在着手写代码时并不是直接上手编写,而是根据需求进行设计,不但将代码中 Bug 出现的机率降到最低,还让代码具有高可读性,高安全性等等。 那大牛们都遵循怎样的原则呢,我们能不能学习一下? 将大牛们的经验总结到一起,可以得到以下「7 大程序设计原则」 。这些设计原理源于对实际软件开发现场的分析,是提高代码质量的经验结晶。 让我们一起一探究竟吧! 遵循同构原则能让我们更容易嗅出代码的异样, 从而找出问题所在。 图表和工业制品在设计上追求平衡之美,在这一点上,同构原则也 有着相似之处。 明确且可靠的设计不仅对我们自身有益,还可以给负责维护的人带来方便。 06 清晰原则 Clarity Principle What:注意逻辑的清晰性 清晰原则就是注意逻辑的清晰性。 07 安全原则 Safty Principle What:注意安全性 安全原则就是注意安全性,采用相对安全的方法来对具有不确定性的、模糊的部分进行设计和编程。

    1.4K31发布于 2021-05-06
  • 来自专栏深入浅出Java

    Java并发设计7原则

    Java并发设计7原则在Java并发编程的世界中,高效且安全地管理线程交互是一项至关重要的挑战本文基于Effective Java 并发章节总结的7原则这些原则旨在帮助开发者规避常见的并发陷阱,确保程序在多线程环境下的正确性和性能表现同步访问共享可变数据在并发中多线程同时访问共享可变的数据是线程不安全的 实现的并发工具(CountDownLatch...)能更方便的解决wait\notify能解决的问题除非要维护老项目使用的wait、notify,否则优先使用并发工具,能够更简单、方便线程安全性的文档化当设计的类可能被客户端并发调用时在文档上说明线程安全级别

    18721编辑于 2024-08-01
  • 来自专栏无原型不设计

    7原则,看懂「深色模式」设计

    △摹客操作界面 大多数人喜欢深色模式的原因,都基于以下两点: 色彩的高对比会弱化背景,更聚焦内容展示; 新鲜感,黑色的视觉效果更炫酷; 想要更好的设计深色模式UI,了解这7原则是关键。 7原则 从视觉到设置 1.使用低饱和度的颜色 在深色模式下,界面本身比较暗沉,使用鲜艳的颜色会对用户不太友好,导致阅读性较差。 所以在设计的时候需要避免使用高饱和度颜色。 设计规范管理,可以利用第三方设计平台, 协助UI设计师高效协作 更懂中国设计师UI设计工具 https://www.mockplus.cn/dt/? hmsr=zhihu 6.遵循设计规范 苹果和谷歌的设计规范里包含所有主要平台对于深色模式的原则。根据他们的设计规范调整设置,确保设计内容符合主流生态系统。 点击查看Apple和Google设计规范: 深色模式- iOS 深色模式- macOS Google-黑色主题 ​ 7.用户自由开关 最后这一点很重要,把深色模式的使用权交给用户决定。

    1.3K10编辑于 2022-11-24
  • 来自专栏国产程序员

    面向对象的7设计原则(2)-接口隔离原则

    或许有的人认为接口隔离原则和单一职责原则很像,但两个原则还是存在着明显的区别。单一职责原则是在业务逻辑上的划分,注重的是职责。接口隔离原则是基于接口设计考虑。 例如一个接口的职责包含10个方法,这10个方法都放在同一接口中,并且提供给多个模块调用,但不同模块需要依赖的方法是不一样的,这时模块为了实现自己的功能就不得不实现一些对其没有意义的方法,这样的设计是不符合接口隔离原则的 接口隔离原则要求"尽量使用多个专门的接口"专门提供给不同的模块。 优点 避免接口污染 一个类如果要实现一个接口,那么就要实现这个接口要求的所有方法,如果这个接口里面包含这个类不需要的方法,那么就会造成接口污染,这是不好的设计,会对系统留下隐患。 我们在做系统设计时也需要考虑对系统之间或模块之间的接口提供定制服务。提供定制服务就必然有一个需求:只提供访问者需要的方法。这也是可以通过细化接口实现的。 高内聚 什么是高内聚?

    96410发布于 2020-07-13
  • 来自专栏国产程序员

    面向对象的7设计原则(3)-依赖倒置原则

    依赖倒置原则 High level modules should not depend upon low level modules.Both should depend upon abstractions 由于RunTu是一个高级模块并且是一个细节实现类,此类依赖了书籍Java和Linux又是一个细节依赖类,这导致RunTu每读一本书都需要修改代码,这与我们的依赖倒置原则是相悖的。 闰土也意识到了这一点,买了一本《设计模式》看了看,然后改成了下边的代码: class Runtu { void study(IBook iBook) { iBook.bookName this.iBook = iBook; } void study() { this.iBook.bookName(); } } 总结 依赖倒置原则的本质就是通过抽象 我们在项目中使用这个原则要遵循下面的规则: 每个类尽量都有接口或者抽象类,或者抽象类和接口两都具备 变量的表面类型尽量是接口或者抽象类 任何类都不应该从具体类派生 尽量不要覆写基类的方法 如果基类是一个抽象类

    70930发布于 2020-07-28
  • 来自专栏国产程序员

    面向对象的7设计原则(5)-里氏代换原则

    定义 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。 原则 第一点 子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法。 value = num1 + num2 +num2; System.out.println("子类计算结果:" + value); } } 总结 通过上面的描述相信大家都对里氏替换原则有了一个基本的概念 然而在实际开发中我们在很多时候还是会违背该原则的,虽然表面上没有什么特别大的问题,但是这样做会大大增加代码的出错率。

    1.4K20发布于 2020-08-04
  • 来自专栏国产程序员

    面向对象的7设计原则(1)-单一职责原则

    当我们去改变一个具有多个职责的类时可能会影响该类的其他功能 单一职责原则代表了设计应用程序时一种很好的识别类的方式,并且它提醒你思考一个类的所有演化方式。 单一职责原则原则的核心含意是:只能让一个类/接口/方法有且仅有一个职责。 ,但在方法级别上却是符合单一职责原则的,因为它并没有动原来方法的代码。 void run3(String animal){ System.out.println(animal+"swimming in the water..."); } } 单一职责原则虽然它是最简单但又最难运用的原则 ,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关实践经验。

    50110发布于 2020-07-13
  • 来自专栏国产程序员

    面向对象的7设计原则(6)-迪米特原则

    迪米特原则 迪米特原则(Law of Demeter)又叫最少知道原则(Least Knowledge Principle),可以简单说成:talk only to your immediate friends 迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。 面向对象的设计原则和面向对象的三大特性本就不是矛盾的。迪米特法则其根本思想,是强调了类之间的松耦合。 摘自大话设计模式: ? ? ? 注意 在类的划分上,应该创建弱耦合的类。类与类之间的耦合越弱,就越有利于实现可复用的目标。 在类的结构设计上,尽量降低类成员的访问权限。 在类的设计上,优先考虑将一个类设置成不变类。 在对其他类的引用上,将引用其他对象的次数降到最低。 不暴露类的属性成员,而应该提供相应的访问器(set 和 get 方法)。

    70440发布于 2020-08-17
  • 来自专栏国产程序员

    面向对象的7设计原则(4)-合成聚合复用原则

    合成复用原则 在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用这些对象的目的。 在设计中, 聚合不应该频繁出现,这样会增大设计的耦合度。 在面向对象的设计里,有两种基本的方法可以在不同的环境中复用已有的设计和实现,即通过合成/聚合复用和通过继承复用。两者的特点和区别,优点和缺点如下。 因此,当一个基类发生了改变时,这种改变会传导到一级又一级的子类,使得设计师不得不相应的改变这些子类,以适应超类的变化。 由于继承复用有以上的缺点,所有尽量使用合成/聚合而不是继承来达到对实现的复用,是非常重要的设计原则。 个人博客 简书 掘金 CSDN OSCHINA

    1.5K40发布于 2020-07-28
  • 来自专栏技术之路

    设计原则——开闭原则

    什么是开闭原则? 在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即应当可以在不必修改源代码的情况下改变这个模块的行为。 如何运用开闭原则? 开闭原则解决问题的关键在于抽象化,把系统所有可能的行为抽象成一个抽象底层,这个抽象底层规定出所有的具体实现必须提供的方法的特征,给系统定义出一个一劳永逸,不再修改的抽象设计,此设计允许有无穷尽的行为在实现层被实现 在JAVA中可以定义一个或多个抽象Java类或Java接口,规定出所有的具体类必须提供的方法的特征作为系统设计的抽象层。 作为系统设计的抽象层,要预见所有可能的扩展,因此在任何扩展情况下系统抽象底层不需要修改。同时,由于抽象层导出一个或多个新的具体类可以改变系统的行为,因此系统的设计对扩展是开放的。 遵守开闭原则进行如下改变 打折类: public class OffNovelBook extends NovelBook { public OffNovelBook(String name

    39600编辑于 2024-04-23
  • 来自专栏程序小小事

    请用上帝视角审视7设计原则

    截至上周,我们在S.O.L.I.D原则之外,又给大家分享了其他两个个设计原则:迪米特原则和组合复用法则。 至此,面向对象的7设计原则,我们都聊了一遍! 7原则之间的关系图,还有另一个版本(如下图)。 两张图都围绕着面向对象设计,Object Oriented Programming。它的本质是通过建立模型体现抽象思维过程和面向对象的方法。 对象应该怎么设计呢?或者说,类应该怎么设计呢?刚刚提到的7原则就是核心! PS:如果你还对其中任一原则尚存疑惑,请点击查看。 1.单一职责原则(SRP) 2.开放封闭原则(OCP) 3.里氏替换原则(LSP) 4.接口隔离原则(ISP) 5.依赖倒置原则(DIP) 6.迪米特原则(LKP) 7.组合复用原则(CRP) 小结 关于软件设计原则的介绍 这些原则都是前辈们归纳总结出来的,对我们项目的开发实践和重构大有裨益! 7设计原则间是相辅相成的,建议小伙伴们耐心看完每一个原则。再综合审视各个原则,看看它们之间是如何相互关联和佐证的。

    27520编辑于 2023-09-13
  • 来自专栏独立观察员博客

    7种常用的面向对象的设计原则

    面向对象设计的目标之一就是可维护性复用。 包括: 1、设计方案和代码的复用 2、系统要易于扩展和修改 面向对象的设计原则就可以作为上述目标的指导方针,这些原则蕴含在很多的设计模式中,是前辈们从许多的设计方案中总结出来的指导性原则。 最常用的7设计原则: 单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责 开闭原则(Open-Closed Principle 依赖倒置原则(Dependence Inversion Principle, DIP):抽象不应该依赖于细节,细节应该依赖于抽象 接口隔离原则(Interface Segregation Principle 以上设计原则,如果你的项目中有真真切切的落实几个,那么你的代码的可扩展性和可维护性都将会有很大的提高。 参考资料:

    37530编辑于 2022-12-06
  • 来自专栏架构师成长之路

    设计原则:面向对象设计原则详解

    而在面向对象的设计里面,可维护性复用都是以面向对象设计原则为基础的,这些设计原则首先都是复用的原则。遵循这些设计原则可以有效地提高系统的复用性,同时提高系统的可维护性。 面向对象设计原则设计模式也是对系统进行合理重构的指导方针。 可靠性高性能:增加新的功能后,对原来的功能没有影响, 常用的面向对象设计原则包括7个,这些原则并不是孤立存在的,它们相互依赖,相互补充。 6、里氏替换原则 7、合成/聚合原则。 一.单一职责原则Single 1、定义:类的职责要单一,不能将太多的职责放在一个类中,应该只负责一类行为。 2、原则分析: 1)如果说开闭原则是面向对象设计的目标,依赖倒转原则是到达面向设计"开闭"原则的手段..如果要达到最好的"开闭"原则,就要尽量的遵守依赖倒转原则.

    3K30编辑于 2022-04-14
  • 来自专栏用户5325874的专栏

    设计原则

    类应该对扩展开发,对修改关闭 依赖倒置原则 要依赖抽象,不要依赖具体类 依赖倒置,倒置在哪? 在依赖倒置原则中的倒置指的是和一般的OO设计的思考方式完全相反。 如果说设计一个比萨店,我们应该从上往下思考,先要有一个比萨店,然后比萨点根据要求生产出具体类型的比萨。 (具体方式可以是简单工厂,也可以是工厂方法模式) 本来的设计方式: ? 依赖倒置的设计方式: ? 最少知识原则 不要让太多类耦合在一起,免得修改系统的一部分,会影响到另外一部分。 ? ? 内聚 当来一个类或者一个模块被设计成只支持一组相关功能的时候,我们说它具有高内聚。反之,当被设计成支持一组不相关的功能时,我们说它具有低内聚。 里氏替换原则为继承定义的规范: 子类必须完全实现父类的方法 子类可以有自己的新方法、新属性

    61640发布于 2020-01-16
  • 来自专栏求道

    设计原则之开闭原则

    所谓对扩展开放,对修改关闭,其实是设计模式里面所重点提倡的,后续所有涉及模式的介绍其实都是为了程序能够更好的扩展,提倡设计模式的本质就是为了减少 增加一点功能而修改系统的主要逻辑! StringFormatUtil.stringFormat(MSG)); } } 程序必须首先让人类理解,然后顺便让机器能执行^_^xxxx Process finished with exit code 0 总结 通过上述代码可以知道,开闭原则是是为了避免过多的修改原有的代码逻辑 ,用扩展代替修改而衍生的一个原则,不可否认,他也是所有的设计模式都想表达的一个结果,高扩展性。 开闭原则也并不是免费的。有些情况下,代码的扩展性会跟可读性相冲突。比如,我们之前举的 StringFormat格式化的例子。

    84230发布于 2020-09-15
  • 来自专栏DOTNET

    设计原则

    这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。 为什么要遵循此原则? 我们要遵循OCP原则,OCP背后的机制是抽象和多态,支持抽象和多态的关键机制是继承(比如C#是这样),那么是什么设计规则支配着这种继承用法?最佳的继承层次特征是什么? 该原则是框架设计的核心。 为什么要遵守此原则? 如果高层模块依赖于低层模块,那么对低层模块的改动会直接影响到高层模块,从而迫使他们一次做出改动。 违反原则的情形 高低层组件通过具体类来实现交互。 7 组合/聚合复用原则(CARP) 定义 将已有的多个对象组成一个新对象,达到复用的目的。 为什么要遵守此原则? 三、控制反转(IoC) 控制反转是基于面向对象的原则,提倡松耦合理念的设计原则,允许独立开发应用程序的各个组件。 实现方式 实现方式有两种:依赖注入,服务定位。

    1K71发布于 2018-03-30
  • 来自专栏一Li小麦

    设计原则

    设计原则 ? 有句古老的谚语说:“愚弄我一次,应该羞愧的是你。再次愚弄我,应该羞愧的是我。”这也是一种有效的对待软件设计的态度。为了防止软件背着不必要的复杂性,我们会允许自己被愚弄一次。 ——《敏捷软件开发原则、模式与实践》 好的代码永远是需要设计的。一名高级程序员,更应该有设计师的潜质,不只是关注怎么用代码实现业务,更关注的是代码的设计。 JavaScript用得上设计原则有单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、合成复用原则和最少知识原则等。本文将选取三个常用的阐述之。 需要明确的是:设计原则只是一种指导,没有哪条原则是在实际开发中必须遵守的。但善用原则,可以帮助更好地设计代码。 1 单一职责原则(srp) 概述 定义:就一个类而言,应该仅有一个引起它变化的原因。 在面向对象的程序设计中,开放封闭原则(OCP)是最重要的一条原则。很多时候,一个程序具有良好的设计,往往说明它是符合开放封闭原则的。

    74420发布于 2019-11-21
  • 来自专栏蝉沐风的码场

    设计原则(1)| 开闭原则

    这些操作都是通过「修改」来实现新功能的,不符合「开闭原则」。 如果我们要遵循「开闭原则」,必须对修改关闭,对扩展开放。 其次,「开闭原则」的定义是软件实体(模块、类、方法等)应该对扩展开放,对修改关闭。 所有的设计原则都只有一个最终归宿——不破坏原有代码的正常运行,方便扩展。 但是想识别出所有可能的扩展点既不可能也没必要,最合理的做法是对一些比较确定的、短期内可能会发生的需求进行扩展设计。 还是那句话,设计原则设计模式不是金科玉律,只要适合当前需求,并具备一定弹性的设计就是好设计。要平衡代码扩展性和可读性,切勿滥用设计原则设计模式,牺牲代码的可读性。

    79020编辑于 2022-08-22
  • 软件7设计原则(附案例所敲代码)

    7、合成复用原则 8、本篇博客所写代码 ---- 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据软件设计原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本 1 、开闭原则 概念: 开闭原则(Open Closed Principle)是编程中最基础、最重要的设计原则; 对扩展开放,对修改关闭。 ,对于服务端的代码尽量做到只新增不修改 上面皮肤案例也体现了单一职责原则: 使用单一职责后:皮肤交给各个子类去实现,一个类 负责一款皮肤; 3、里氏替换原则 概念: 里氏代换原则是面向对象设计的基本原则之一 company); //和粉丝 agent.meeting(); //和媒体公司 agent.business(); } } 7、 8、本篇博客所写代码 软件设计原则: 软件设计原则案例所敲代码

    57720编辑于 2022-11-07
领券