设计模式之七大原则

这篇具有很好参考价值的文章主要介绍了设计模式之七大原则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

👑单一职责原则

        单一职责原则告诉我们一个类应该只有一个责任或者只负责一件事情。

        想象一下,如果一个类承担了太多的责任,就像一个人同时负责做饭、洗衣服和打扫卫生一样,那么这个类会变得非常复杂,难以理解和维护。而且,当需要修改其中一个功能时,可能会影响到其他功能,导致意想不到的问题。

        通过遵循单一职责原则,我们可以将一个复杂的类拆分成多个小的、具有独立职责的类。每个类只关注自己的职责,这样代码会更加清晰、易于理解和修改。

        举个例子,假设我们有一个User类,它既负责用户的登录验证,又负责用户信息的管理。按照单一职责原则,我们可以将这个类拆分成两个类:一个负责用户的登录验证,另一个负责用户信息的管理。这样,当我们需要修改登录验证逻辑时,就不会影响到用户信息的管理部分。

        总结起来,单一职责原则的核心思想是:一个类应该只有一个责任,这样可以提高代码的可读性、可维护性和可扩展性。

👑里氏替换原则

        里氏替换原则指导我们如何设计和使用继承关系。简单来说,里氏替换原则告诉我们,子类对象可以替换父类对象出现在任何能使用父类对象的地方,而不会产生错误或者破坏程序的正确性

        举个例子,假设有一个动物类Animal,其中有一个方法叫做makeSound(),用于发出动物的声音。然后我们派生出了两个子类Cat和Dog,它们都继承自Animal类。按照里氏替换原则,我们可以在任何需要Animal对象的地方使用Cat或Dog对象,比如调用makeSound()方法。

        具体到代码实现上,如果Cat和Dog类分别实现了自己的makeSound()方法,那么无论是Animal类型的变量还是Cat、Dog类型的变量,都可以调用makeSound()方法,而且得到的结果应该符合预期。

        总结起来,里氏替换原则的核心思想是:子类对象应该能够替换父类对象,而不会引起任何错误或异常。这样设计出来的代码更加灵活、可扩展,并且易于维护。

👑开闭原则

        开闭原则告诉我们软件实体(类、模块、函数等)应该对扩展开放,对修改关闭

        开闭原则的核心思想是:当需要改变一个系统的行为时,我们应该尽量通过添加新的代码来实现,而不是修改已有的代码。这样做的好处是,我们可以保持已有的代码稳定性,减少引入新错误的风险。

        举个例子,假设我们有一个电商网站,其中有一个购物车类Cart,用于管理用户的购物车信息。现在,我们需要添加一个新的功能,比如优惠券折扣。按照开闭原则,我们应该创建一个新的类DiscountCoupon,并且让它负责计算折扣金额。然后,在Cart类中,我们可以通过调用DiscountCoupon类的方法来获取折扣金额,而不是直接修改Cart类的代码。

        这样做的好处是,如果以后我们需要添加其他类型的折扣,比如满减或者赠品,我们只需要创建相应的类,并且确保它们都符合同一个抽象接口。这样,我们可以轻松地扩展系统的功能,而不需要修改已有的代码。

        总结起来,开闭原则的目标是让我们能够通过扩展来改变一个系统的行为,而不需要修改已有的代码。这样可以提高代码的稳定性、可维护性和可扩展性。

👑依赖倒转原则

        依赖倒转原则告诉我们高层模块不应该依赖于低层模块,而是应该依赖于抽象。

        通俗地说,依赖倒转原则就是要求我们在设计代码时,尽量使用抽象类或者接口来进行编程,而不是直接依赖具体的实现类。这样做的好处是,可以降低模块之间的耦合度,提高代码的灵活性和可维护性。

        举个例子,假设我们有一个电商网站,其中有一个Order类用于处理订单相关的逻辑。按照依赖倒转原则,我们应该定义一个抽象的Payment接口,然后让Order类依赖于这个接口。具体的支付方式,比如支付宝、微信支付等,都应该实现这个接口,并且提供自己的具体实现。

        这样做的好处是,当我们需要更换支付方式时,比如从支付宝切换到微信支付,我们只需要创建一个新的实现类,并且修改配置文件或者注入相应的实例即可,而不需要修改Order类的代码。这样,我们可以轻松地扩展和变更系统的功能,而不会对其他模块产生影响。

        总结起来,依赖倒转原则的核心思想是:高层模块不应该依赖于低层模块,而是应该依赖于抽象。通过使用抽象类或者接口来编程,可以降低模块之间的耦合度,提高代码的灵活性和可维护性。

👑接口隔离原则

        接口隔离原则告诉我们客户端不应该依赖于它不需要的接口

        通俗地说,接口隔离原则就是要求我们将庞大而臃肿的接口拆分成更小、更具体的接口,以满足客户端的精确需求。这样做的好处是,可以降低客户端与接口之间的耦合度,提高代码的灵活性和可维护性。

        举个例子,假设我们有一个电商网站,其中有一个Product类用于处理商品相关的逻辑。按照接口隔离原则,我们应该将Product类的接口拆分成多个更小的接口,比如IProductInfo和IProductReview。这样,客户端只需要依赖于它们所需的接口,而不需要依赖整个Product类的接口。

        这样做的好处是,当我们需要在客户端中使用商品信息时,只需要实现IProductInfo接口即可,而不需要关心其他不需要的方法。同样,当我们需要在客户端中使用商品评价时,只需要实现IProductReview接口即可。

        通过接口隔离原则,我们可以避免客户端依赖于不需要的接口,减少了对无用方法的依赖,提高了代码的可读性和可维护性。同时,接口隔离原则也促进了代码的复用,因为我们可以根据需要选择实现不同的接口。

总结起来,接口隔离原则的核心思想是:客户端不应该依赖于它不需要的接口。通过拆分庞大的接口,只提供客户端所需的精确接口,可以降低耦合度,提高代码的灵活性和可维护性

👑迪米特法则

        迪米特法则,也被称为最少知识原则,它告诉我们一个对象应该尽量减少与其他对象之间的交互,只与直接的朋友进行通信。

        通俗地说,迪米特法则就是要求我们在设计代码时,尽量降低对象之间的耦合度,避免一个对象过多地了解其他对象的内部细节。这样做的好处是,可以提高代码的可维护性和灵活性,减少对其他对象的依赖。

        举个例子,假设我们有一个电商网站,其中有一个Order类用于处理订单相关的逻辑。按照迪米特法则,我们应该尽量减少Order类与其他类的直接交互,只与必要的对象进行通信,比如与Product类、Payment类等直接相关的对象。

        这样做的好处是,当需要修改或者扩展系统的某个功能时,我们只需要关注与之直接相关的对象,而不需要考虑其他无关的对象。这样可以降低代码的复杂度,提高代码的可读性和可维护性。

        另外,迪米特法则还鼓励使用中间对象来协调其他对象之间的交互,以减少对象之间的直接依赖关系。这样可以提高系统的灵活性,降低耦合度。

        总结起来,迪米特法则的核心思想是:一个对象应该尽量减少与其他对象之间的交互,只与直接的朋友进行通信。通过降低对象之间的耦合度,可以提高代码的可维护性和灵活性,减少对其他对象的依赖。

👑合成复用原则

        合成复用原则告诉我们在设计代码时,应该优先使用组合(composition)而不是继承(inheritance)来实现复用。

        通俗地说,合成复用原则就是要求我们通过将已有的类组合起来,构建新的类来实现复用,而不是通过继承已有的类。这样做的好处是,可以减少类之间的耦合度,提高代码的灵活性和可维护性。

        举个例子,假设我们有一个电商网站,其中有一个Order类用于处理订单相关的逻辑。按照合成复用原则,我们应该优先使用组合来实现订单的功能,而不是通过继承已有的类。

        具体来说,我们可以定义一个Order类,然后在该类中使用其他已有的类,比如Product类和Payment类,作为其成员变量。这样,Order类就可以通过调用这些成员变量的方法来实现自己的功能,而不需要继承这些类。

        这样做的好处是,当我们需要修改或者扩展系统的某个功能时,只需要关注与之相关的类,而不需要影响到其他类。同时,由于使用了组合而不是继承,我们可以更加灵活地选择和替换成员变量,以满足不同的需求。

总结起来,合成复用原则的核心思想是:优先使用组合而不是继承来实现复用。通过将已有的类组合起来构建新的类,可以降低耦合度,提高代码的灵活性和可维护性。文章来源地址https://www.toymoban.com/news/detail-649217.html

到了这里,关于设计模式之七大原则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 1.设计模式之七大原则和介绍

    0.为什么我要学习设计模式呢? 我发现mysql的jdbc有factory有工厂模式(编程思想,不指定语言都可以用) mq有一个QueueBuilder().setArg().xxx().build建造者模式,单例模式貌似也遇到过,前端也遇到了好几个设计模式的问题,比如prototype深拷贝和浅拷贝 所以我决定系统的学习一下设计模式…

    2024年02月11日
    浏览(57)
  • 创建型模式 (Creational Patterns) 玄子Share 设计模式 GOF 全23种 + 七大设计原则

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWLAOFtO-1691793071647)(./assets/%E7%8E%84%E5%AD%90Share%20%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%20GOF%20%E5%85%A823%E7%A7%8D%20+%20%E4%B8%83%E5%A4%A7%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99.png)] GoF(Gang of Four)是四位计算机科学家(Erich Gamma、Ri

    2024年02月12日
    浏览(35)
  • 【设计模式】设计原则-开闭原则

    定义 作用 1、方便测试;测试时只需要对扩展的代码进行测试。 2、提高代码的可复用性;粒度越小,被复用的可能性就越大。 3、提高软件的稳定性和延续性,易于扩展和维护。 实现方式 通过“抽象约束、封装变化”来实现开闭原则。通过接口或者抽象类为软件实体定义一

    2024年02月15日
    浏览(37)
  • 【设计模式】设计原则-里氏替换原则

    定义 任何基类可以出现的地方,子类一定可以出现。 通俗理解:子类可以扩展父类的功能,但不能改变父类原有的功能。 换句话说,子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。 针对的问题 主要作用就是规范继承时子类的一些书写规则。

    2024年02月14日
    浏览(49)
  • 前端设计模式和设计原则之设计原则

    1 开闭原则 该原则指出软件实体(类、模块、函数等)应该 对扩展开放,对修改关闭 。也就是说,在添加新功能时,应该通过扩展现有代码来实现,而不是直接修改已有的代码。这样可以确保现有代码的稳定性,并且减少对其他部分的影响。 在上述例子中,有一个原始功能

    2024年02月07日
    浏览(39)
  • 【Java 设计模式】设计原则之开放封闭原则

    在软件开发中,设计原则是创建灵活、可维护和可扩展软件的基础。 这些原则为我们提供了指导方针,帮助我们构建高质量、易理解的代码。 ✨单一职责原则(SRP) ✨开放/封闭原则(OCP) ✨里氏替换原则(LSP) ✨依赖倒置原则(DIP) ✨接口隔离原则(ISP) ✨合成/聚合复

    2024年02月02日
    浏览(49)
  • 【Java 设计模式】设计原则之里氏替换原则

    在软件开发中,设计原则是创建灵活、可维护和可扩展软件的基础。 这些原则为我们提供了指导方针,帮助我们构建高质量、易理解的代码。 ✨单一职责原则(SRP) ✨开放/封闭原则(OCP) ✨里氏替换原则(LSP) ✨依赖倒置原则(DIP) ✨接口隔离原则(ISP) ✨合成/聚合复

    2024年01月20日
    浏览(44)
  • 设计模式——设计模式以及六大原则概述

    设计模式代表有经验的面向对象软件开发人员使用的最佳实践。 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。 这些解决方案是由许多软件开发人员在相当长的时间内通过试错获得的。 在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四

    2024年02月13日
    浏览(51)
  • 设计模式的设计原则

    为什么需要设计模式? 我的理解设计模式就是一种针对某种问题的套路,是一套被反复使用,多数人所知晓的,经过分类编目的,代码设计经验的总结。 1.开闭原则 1.1 定义:     一个软件实体应当对扩展开放,对修改关闭,即软件实体应尽量在不修改原有代码下进行扩展

    2024年02月09日
    浏览(39)
  • 设计模式-原则篇-01.开闭原则

    ​ 可以把设计模式理解为一套比较成熟并且成体系的建筑图纸,经过多次编码检验目前看来使用效果还不错的软件设计方案。适用的场景也比较广泛,在使用具体的设计模式之前先要学习软件设计的基础 “软件设计原则”,后面的23个设计模式都是遵从“软件设计原则演变而

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包