首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏huofo's blog

    设计模式(07)——设计原则2

    定义 不要去设计当前用不到的功能,不要去写当前用不到的代码。 该原则是作为一个指导思想来做的,其作用就是防止过度设计,但需要注意的是其是让你不做,但需要有可能要做的意识,提前留好拓展点,这样如果要做的时候,也可以快速跟上。 ** 后续会有一篇文章,来专门讲解如何在软件设计中,防止过度设计,但对对应该优化,该留好优化点如何实现。 这样的设计可能会导致以下问题, 当一个不知情的人看到这两段代码完成的任务是一样的,但采用的解决方式却是不一样的,则会想其的设计深意,以及不知道该用哪一个? 迪米特原则 定义 迪米特原则是用来指导设计高内聚、低耦合代码的原则,因此我们先看一下什么是高内聚、低耦合。

    48920编辑于 2022-03-17
  • 来自专栏∑小熊猫的博客

    JAVA 设计模式系列(2) —— 设计原则

    Java 设计模式的相关原则 一、单一职责原则 单一职责原则: 应该有且仅有一个原则引起类的变更 单一职责可以简答的理解为,一个类或者对象,承担的只能应该尽可能单一。 单一职责用“职责”和“变化原因”来衡量接口或类设计得是否优良。但是“职责”的确定往往是无法度量的。 PS: 子类出现的地方,父类未必可以出现 在类中调用其他类时,务必使用父类或接口,如果不能使用,则说明类的设计已经违背了里氏替换原则(Liskov Substitution Principle,LSP ,少公有,多私有) 定制服务: (为特定的服务对象提供其所需的方法) 接口设计是有限度的: (接口的粒度越小,系统越灵活,但是结构也随之复杂起来) 五、迪米特法则 迪米特法则描述:一个对象应该对其他对象有最少的了解 六、开闭原则 开闭原则:软件实体应该对扩展开放,对修改关闭

    50210发布于 2020-12-31
  • 来自专栏国产程序员

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

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

    1K10发布于 2020-07-13
  • 来自专栏技术之路

    设计原则——开闭原则

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

    51100编辑于 2024-04-23
  • 来自专栏小樱的经验随笔

    设计模式六大原则2):里氏替换原则

            肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑。其实原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的。 定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 新功能P由类A的子类B来完成,则子类B在完成新功能P2的同时,有可能会导致原有功能P1发生故障。 解决方案:当使用继承时,遵循里氏替换原则。 而里氏替换原则就是表达了这一层含义。         继承作为面向对象三大特性之一,在给程序设计带来巨大便利的同时,也带来了弊端。 看上去很不可思议,因为我们会发现在自己编程中常常会违反里氏替换原则,程序照样跑的好好的。所以大家都会产生这样的疑问,假如我非要不遵循里氏替换原则会有什么后果?        

    69780发布于 2018-04-08
  • 来自专栏编程

    设计模式六大原则2):里氏替换原则

    SpringCloud实战视频下载 肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑。 定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 新功能P由类A的子类B来完成,则子类B在完成新功能P2的同时,有可能会导致原有功能P1发生故障。 解决方案:当使用继承时,遵循里氏替换原则。 而里氏替换原则就是表达了这一层含义。 继承作为面向对象三大特性之一,在给程序设计带来巨大便利的同时,也带来了弊端。 里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义: 1、子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。 2、子类中可以增加自己特有的方法。

    75890发布于 2017-12-29
  • 来自专栏架构师成长之路

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

    而在面向对象的设计里面,可维护性复用都是以面向对象设计原则为基础的,这些设计原则首先都是复用的原则。遵循这些设计原则可以有效地提高系统的复用性,同时提高系统的可维护性。 2、开闭原则的背景 任何软件都需要面临一个很重要的问题:即它们的需求会随时间的推移而发生变化。 当软件系统需要面对新的需求时,我们应该尽量保证系统的设计框架是稳定的。 而里氏替换原则就是表达了这一层含义。 2、继承在给程序设计带来便利的同时,也带来了弊端。 2原则分析: 1)如果说开闭原则是面向对象设计的目标,依赖倒转原则是到达面向设计"开闭"原则的手段..如果要达到最好的"开闭"原则,就要尽量的遵守依赖倒转原则. 2原则分析: 1)在面向对象设计中,可以通过两种基本方法在不同的环境中复用已有的设计和实现,即通过 组合 / 聚合关系 或通过 继承 。 继承复用 :实现简单,易于扩展。

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

    设计原则

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

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

    设计原则之开闭原则

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

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

    设计原则

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

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

    设计原则

    ——《敏捷软件开发原则、模式与实践》 好的代码永远是需要设计的。一名高级程序员,更应该有设计师的潜质,不只是关注怎么用代码实现业务,更关注的是代码的设计。 JavaScript用得上设计原则有单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、合成复用原则和最少知识原则等。本文将选取三个常用的阐述之。 需要明确的是:设计原则只是一种指导,没有哪条原则是在实际开发中必须遵守的。但善用原则,可以帮助更好地设计代码。 1 单一职责原则(srp) 概述 定义:就一个类而言,应该仅有一个引起它变化的原因。 2 最少知识原则(lkp) 概述 最少知识原则(LKP,迪米特法则)说的是一个软件实体应当尽可能少地与其他实体发生"关系"。 在面向对象的程序设计中,开放封闭原则(OCP)是最重要的一条原则。很多时候,一个程序具有良好的设计,往往说明它是符合开放封闭原则的。

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

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

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

    88320编辑于 2022-08-22
  • 来自专栏Road

    设计模式 -- 设计原则

    终极目的 稳定、灵活、健壮 实现手段 低耦合、高内聚 设计原则 [设计原则.PNG] 单一职责 & 接口隔离 单一职责 侧重于职责 接口隔离 侧重于业务逻辑 开闭原则 Define: Software 上面的定义描述的很虚,不像另外五条原则一样,有比较实际的描述。 但是却是比较基础的原则之一,他的影子在其他原则的实践中也总是可以看到,笔者的理解,他就是一个精神领袖,是最基本的原则,也是所有原则的集大成的体现。 更多 实现拥抱变化的方法远不止于上面所述的6种原则,但是这这6条原则可以应对大部分情况;更重要的是,脱离业务的设计都是耍流氓,严格死扣某一条原则,是一条不归路 书籍推荐 《设计模式之禅》

    77450发布于 2018-08-27
  • 设计模式-设计原则

    这本书中主要讲了六种设计原则: “开-闭”原则 里氏替换原则 依赖倒置原则 接口隔离原则 单一职责原则 迪特米法则 这些设计原则首先都是复用的原则,遵循这些原则可以有效的提高系统的复用性,同时也提高了系统的可维护性 1.为什么会有这样一个原则来作为程序设计的一种约束呢? ,能够用一种原则来进行一些基本的约束,使得在软件后期的功能变更、扩展或者维护更加容易 2.开闭原则解决的问题是什么? 依赖倒转原则 实现“开闭”原则的关键是抽象化,并且从抽象化导出具体化实现。如果说开闭原则是面向对象设计的目标的话,依赖倒转原则就是面向对象设计的主要机制(java与模式)。 总结 OK ,至此,设计原则部分就复习完了。总结一下: 1. 单一职责原则要求实现类要职责单一; 2. 里氏替换原则要求不要去破坏继承系统; 3. 依赖倒置原则要求面向接口编程; 4.

    1.5K10编辑于 2025-06-06
  • 来自专栏Linux学习~

    设计模式-设计原则

    设计模式-设计原则 单一职责原则 单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 开闭原则:软件实体应当对扩展开放,对修改关闭。 里氏替换原则 里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象。 依赖倒转原则:高层模块不应依赖于底层模块,它们都应该依赖抽象。 接口隔离原则:客户端不应依赖那些它不需要的接口。

    50120编辑于 2023-11-10
  • 来自专栏IT笔记分享

    设计模式——设计原则

    设计原则 程序开发不仅要知道设计模式还要知道设计原则,尽最大能力按照原则设计开发,对于代码review或者修改后期项目以及项目交接都会很方便。 三、依赖倒置原则 高层模块不应该依赖底层模块,两者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象。 四、接口隔离原则 客户端不应依赖它不需要的接口,对接口进行细化;类建的依赖关系应该建立在最小的接口上。建立单一接口,不要建立臃肿庞大的接口。而且要满足单一职责原则。 六、开闭原则 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。开闭原则可以提高复用性,提高维护性。 2.参数类型、引用对象尽量使用接口或者抽象类,而不是实现类。 3.抽象层尽量保持稳定,一旦确定即不允许修改。 六大设计原则主要是Java面向对象编程设计原则,降低项目耦合,分清职责。

    92060发布于 2019-07-14
  • 来自专栏翎野君

    Java设计原则—开闭原则(转)

    开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统。 定义: 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 软件实体包括以下几个部分: 项目或软件产品中按照一定的逻辑规则划分的模块 抽象和类 方法 开闭原则是为软件实体的未来事物而制定的对现行开发设计进行约束的一个原则。 变化的类型: 逻辑变化 子模块变化 可见试图变化 一个项目的基本路径应该是这样的:项目开发、重构、测试、投产、运维,其中的重构可以对原有的设计和代码进行修改,运维尽量减少对原有代码修改,保持历史代码的纯洁性 开闭原则的重要性: 开闭原则对测试的影响 开闭原则可是保持原有的测试代码仍然能够正常运行,我们只需要对扩展的代码进行测试就可以了。 开闭原则可以提高复用性 在面向对象的设计中,所有的逻辑都是从原子逻辑组合而来的,而不是在一个类中独立实现一个业务逻辑。只有这样代码才可以复用,粒度越小,被复用的可能性就越大。

    57720编辑于 2023-05-12
  • 来自专栏运维开发王义杰

    设计模式原则:开放封闭原则

    开放封闭原则 开放封闭原则表示一个软件实体(如类、模块、函数等)应该对扩展开放,对修改封闭。也就是说,一个软件实体应该在不修改原有代码的前提下,可以扩展新的功能。 开放封闭原则设计模式的核心原则,它体现了软件的灵活性和稳定性。如果一个软件能够满足开放封闭原则,那么它就具有以下两个优点: 能够扩展已有的功能,满足新的需求,具有很强的适应性和灵活性。 { throw new IllegalArgumentException("Invalid expression"); } } } 这个类违反了开放封闭原则 为了遵循开放封闭原则,我们应该将 Calculator 类设计成一个抽象类,并定义一个抽象方法 calculate()。

    42740编辑于 2023-08-10
  • 来自专栏在水一方

    java设计原则--里氏替换原则

    缺点三:增强了耦合性,当父类的常量、变量和方法被修改时需要考虑子类的修改 里式替换作用 Java的单继承机制从总体上看是利大于弊,那么,如何让利的优势发挥最大,同时减少弊的带来的麻烦呢,于是就有了里式替换原则 ,里氏替换原则为良好的继承定义了一个规范 我们在做系统设计时,经常会定义一个接口或抽象类,然后编码实现,调用类则直接传入接口或抽象类,其实这里已经使用了里氏替换原则 举一个CS的案例: 枪的主要职责是射击 注意 在类中调用其他类时务必要使用父类或接口,如果不能使 用父类或接口,则说明类的设计已经违背了LSP原则 本文内容参考设计模式之禅,仅用于个人学习,如有不妥请联系删除

    1.2K20编辑于 2022-06-14
  • 来自专栏运维开发王义杰

    设计模式原则:依赖倒置原则

    依赖倒置原则 依赖倒置原则表示高层模块不应该依赖低层模块,两者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。也就是说,要针对接口编程,而不是针对实现编程。 依赖倒置原则是面向对象设计的重要原则之一,它体现了面向对象的思想和封装的特性。如果一个软件能够遵循依赖倒置原则,那么它就具有以下两个优点: 降低了类之间的耦合性,提高了系统的稳定性。 keyboard.input(); mouse.click(); System.out.println("电脑工作"); } } 这个类违反了依赖倒置原则 这样的设计有以下几个缺点: 类之间的耦合度高,如果 Keyboard 类或者 Mouse 类发生变化,就需要修改 Computer 类的代码。 为了遵循依赖倒置原则,我们应该将 Keyboard 类和 Mouse 类设计成实现一个共同的接口 Component。

    53020编辑于 2023-08-10
领券