设计模式混淆

本文关键字:设计模式 | 更新日期: 2023-09-27 18:13:00

我现在正在复习我的设计模式,当我看到这个教程时有点困惑:

http://www.asp.net/mvc/tutorials/iteration-4-make-the-application-loosely-coupled-cs

如果您继续看清单7,作者说它正在使用装饰器模式。然而,这种模式的主要原则之一是包装对象并添加责任和行为吗?

我认为它看起来更像一个适配器模式,因为它正在调整MVC特定的ModelStateDictionary来与更灵活的IValidationDictionary一起工作,这样如果使用WPF等,则可以使用不同的实现与服务一起使用。添加了新的责任或行为。

我写对了吗?如果我错了谁能解释一下原因吗?

谢谢

设计模式混淆

我同意你的观点,在我看来,这就像适配器模式,也就是说,ModelStateDictionary被抽象在接口IValidationDictionary(适配器接口)后面,使用具体类型(适配器),以便以后可以更改实现。

Decorator Pattern通常通过组合提供额外的功能,暴露与被装饰类型相同的接口。这通常通过子类化或接口实现来完成。

一个装饰的例子是:

  1. 你有一个从数据库中获取"对象"的存储库类
  2. 你有一个存储库装饰器类,它可以缓存对象,而不需要每次都从数据库中获取对象。这个装饰器类通过对原始存储库类的子类化和覆盖Get()方法来首先检查项目的缓存(并且Save()将被覆盖以更新缓存以及数据库),从而提供缓存获取和检索。

我认为你是对的,这篇文章有一个错误。摘自文章:

Decorator模式使您能够将现有的类包装在新的类中类来实现接口。

这并不完全正确——装饰器确实允许您将一个实现包装在另一个实现中,但其目的通常不是实现另一个接口,而是用新功能"装饰"实例。适配器模式允许您使用两个不同的接口,并将其中一个实例修改为与另一个实例相似。