我们一起来读书吧 关注:113贴子:1,496
  • 0回复贴,共1

设计模式第五章读后感(part1)

只看楼主收藏回复

在软件开发中,设计模式是解决常见问题的最佳实践。行为型模式特别关注对象之间的通信和职责分配。
对于其中的指责链(责任链)模式来说,他可以更好的解耦:请求发送者和接收者之间的耦合度降低,发送者不需要知道具体由哪个对象处理请求。并且具有灵活性:可以动态地改变链内的成员或者调整它们的顺序,增加或删除处理请求的对象都很方便。对于扩展性方面:新的请求处理类可以很容易地加入到责任链中,而不需要修改现有代码。
但同样,因为充分解耦也会导致出现性能问题:如果责任链过长,或者处理请求的过程复杂,可能会导致性能下降。
容易调试困难:当请求没有得到处理时,不容易找出是哪个环节出了问题,因为请求可能在链中的任何位置被丢弃。
并且不保证请求被处理:如果没有任何对象处理请求,请求就会无声无息地消失,这可能会导致难以发现的错误。
对于命令模式来说同样可以降低耦合度,因为请求发送者和接收者解耦,发送者只需要知道如何发送命令,而不需要知道命令是如何被接收者执行的。
并且对于队列请求:命令对象可以被存储起来,从而实现请求的队列化、撤销和重做等功能。还可以额外的进行日志记录,可以方便地记录请求的历史信息,用于审计或故障排查。
对于他的缺点,他可能会导致复杂性增加:引入命令模式可能会增加系统的复杂性,因为需要定义额外的命令类和接收者类。并且他也可能导致过度设计:在一些简单的场景下,使用命令模式可能过于复杂,没有必要。
而解释器模式来说,首先他具有可扩展性:可以很容易地添加新的解释规则。并且很灵活,可以方便地修改现有规则,以适应语法上的变化。并且很易于实现,对于简单的语法,解释器模式的实现相对简单。
但另一方面,也会容易引入性能问题:对于复杂的语法,解释器模式可能会导致性能下降,因为需要遍历和解析整个语法树。导致项目难以维护:随着语法的复杂性增加,解释器的代码可能会变得难以理解和维护。并且不适用于复杂语法:对于非常复杂的语法,使用专门的解析器生成器(如ANTLR、Bison等)可能更为合适。
对于迭代器模式,在我们的项目中比较容易用到,首先他通过遍历元素的方式,可以顺序访问聚合对象中的各个元素,而不需要暴露该对象的内部表示。还会简化聚合类:聚合类只需要提供一个创建迭代器的接口,而不需要自行处理遍历逻辑。并且具有一致性:提供一致的遍历接口,使得客户端代码可以透明地遍历不同类型的聚合对象。
但同样,会有较大的性能开销:使用迭代器模式可能会引入额外的性能开销,因为需要创建和维护迭代器对象。也可能破坏封装性:如果迭代器提供了对聚合对象内部结构的直接访问,可能会破坏封装性。
对于中介者模式来说其具有降低耦合度:通过引入中介者对象,降低了各个同事对象之间的耦合度,使得它们可以独立地变化和复用。并且可以简化交互:将复杂的交互逻辑集中在中介者对象中,简化了同事对象之间的交互。也比较易于维护:由于交互逻辑被封装在中介者对象中,因此当需要修改交互逻辑时,只需要修改中介者对象即可,而不需要修改多个同事对象。但另一方面中介者可能变得庞大和复杂:如果中介者承担了过多的职责,它可能会变得庞大和难以维护。这违背了“单一职责原则”。也会导致过度集中化:所有的交互都通过中介者进行,可能会导致过度集中化。如果中介者出现故障,整个系统可能会受到影响。并且会限制灵活性:由于所有的交互都由中介者管理,因此可能会限制系统的灵活性。在某些情况下,直接进行交互可能更为简单和高效。
在这一章中,可以感受到我们在实际开发中,应根据具体需求和场景选择合适的模式。同时,也需要注意避免过度使用或误用模式,以免引入不必要的复杂性和开销。


IP属地:北京来自iPhone客户端1楼2024-03-11 18:42回复