当前位置: 首页 > 知识库问答 >
问题:

似乎不能理解坚实的原则和设计模式[关闭]

丌官霖
2023-03-14

我最近正在尝试进入OOP,我在坚实的原则和设计模式方面遇到了麻烦。我明白人们为什么使用它们,我也真的想使用它们,但是我不能按照规范来开发我的类。我真的很感激任何有助于我理解这些的东西。

共有1个答案

齐招
2023-03-14

我在大学里上过一个花了两周时间学习设计模式的课程,读了四人帮的书,但没有用。理解每种模式的用途以及如何使用它们来解决我的问题对我来说非常困难,我是一个没有太多OO编程经验的开发人员。

真正让我喜欢的书是《头先设计模式》。它首先展示了一个问题,开发人员考虑的不同方法,然后他们如何最终使用设计模式来解决问题。它使用了一种非常简单的语言,使本书非常吸引人。

设计模式最终成为描述解决方案的一种方式,但是您不必使您的类适应解决方案。更多地把它们看作是一个向导,为大量问题提供一个好的解决方案。

让我们谈谈SOLID:

  1. 单一责任。一个班级应该只有一个责任。这意味着,例如,Person类应该只关注与个人本身相关的域问题,而不关注其在数据库中的持久性。为此,您可能希望使用PersonDAO作为示例。Person类可能希望尽可能缩短其职责。如果一个类使用了太多的外部依赖项(即,其他类),这表明该类有太多的责任。当开发人员试图使用对象来模拟真实世界,并且做得太过火时,就会出现这个问题。松散耦合的应用程序通常不太容易导航,也不完全模拟真实世界的工作方式
  2. 打开关闭。类应该是可扩展的,但不能修改。这意味着向类中添加新字段是可以的,但更改现有内容则不是。程序中的其他组件可能取决于所述字段
  3. Liskov替代。如果传递了子类dog和子类cat,则需要动物类型对象的类应该可以工作。这意味着Animal不应该有一个叫bark的方法,因为cat类型的子类不能吠叫。使用Animal类的类也不应该依赖于属于类Dog的方法。不要做类似“如果这个动物是狗,那么(把动物扔给狗)吠叫。如果动物是猫,那么(将动物扔给猫)喵喵叫”的事情
  4. 界面隔离原则。尽可能保持最小的界面。同样是学生的教师应该同时实现IStudent和ITeacher接口,而不是一个称为IStudentAndTeacher的大接口
  5. 依赖反转原则。对象不应实例化其依赖项,但应将它们传递给它们。例如,内部有Engine对象的Car不应该执行Engine=new DieselEngine(),而是应该在构造函数中将引擎传递给它。这样,汽车类将不会耦合到柴油发动机类
 类似资料:
  • 主要内容:1.GRASP:通用职责分配软件模式(共9种),2.SOLID:设计原则(共5种),3.GOF:设计模式(共23种),4.其他必要设计原则GRASP: 通用职责分配软件模式(共9种) SOLID:设计原则(共5种) GOF:设计模式(共23种) 其他必要设计原则 1.GRASP:通用职责分配软件模式(共9种) 告诉我们怎样设计问题空间中的类与分配它们的行为职责,以及明确类之间的相互关系等 Infomation Expert(信息专家) Creator(创造者) Low coupling

  •  重新认识面向对象 理解隔离变化 • 从宏观层面来看,面向对象的构建方式更能适应软件的变化, 能将变化所带来的影响减为最小 各司其职 • 从微观层面来看,面向对象的方式更强调各个类的“责任” • 由于需求变化导致的新增类型不应该影响原来类型的实现—— 是所谓各负其责 对象是什么? • 从语言实现层面来看,对象封装了代码和数据。 • 从规格层面讲,对象是一系列可被使用的公共接口。 • 从概念层面讲,

  • 本文向大家介绍java设计模式-代理模式(实例讲解),包括了java设计模式-代理模式(实例讲解)的使用技巧和注意事项,需要的朋友参考一下 代理模式是java最常见的设计模式之一。spring的aop就是使用了代理模式。 一般而言,代理模式分为静态代理和动态代理两种。 作为结构类的设计模式,作用在于不修改类内部代码的情况下,对类进行拓展,是对继承机制的一种补充。 eg :下面就用户登录这个例子实现

  • 本文向大家介绍javascript设计模式 – 解释器模式原理与用法实例分析,包括了javascript设计模式 – 解释器模式原理与用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript设计模式 – 解释器模式原理与用法。分享给大家供大家参考,具体如下: 介绍:之前在做java开发时,数据库的增删改查特别频繁,并且场景不同需要用到的SQL语句页都不同,如何用调用

  • 本文向大家介绍javascript设计模式 – 原型模式原理与应用实例分析,包括了javascript设计模式 – 原型模式原理与应用实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript设计模式 – 原型模式原理与应用。分享给大家供大家参考,具体如下: 介绍:在日常的开发过程中,我们经常会利用到前端模板引擎来做页面渲染,因为存在很多页面结构相同,内容不同的场景。这种

  • 6. 原型模式(Prototype) Intent 使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象。 Class Diagram Implementation // java public abstract class Prototype { abstract Prototype myClone(); } // java public class ConcreteProt

  • 本文向大家介绍Python设计模式之代理模式实例详解,包括了Python设计模式之代理模式实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python设计模式之代理模式。分享给大家供大家参考,具体如下: 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 运行结果: jiaojiao 送你洋娃娃 jiaojiao 送你花 jiaojiao 送你巧克

  • 原理和设计 比特币网络是一个分布式的点对点网络,网络中的矿工通过“挖矿”来完成对交易记录的记账过程,维护网络的正常运行。 比特币通过区块链网络提供一个公共可见的记账本,用来记录发生过的交易的历史信息。 每次发生交易,用户需要将新交易记录写到比特币区块链网络中,等网络确认后即可认为交易完成。每个交易包括一些输入和一些输出,未经使用的交易的输出( Unspent Transaction Outputs