我正在刷新我的设计模式,当我遇到这个教程时有点困惑:
http://www.asp.net/mvc/tutorials/iteration-4-make-the-application-loosely-coupled-cs
如果查看清单7以后,作者说它正在使用装饰器模式。但是,这种模式的主要原则之一是包装对象和ADD职责和行为吗?
我认为它看起来更像是适配器模式,因为它正在调整MVC特定的ModelStateDictionary以使用更灵活的IValidationDictionary,以便在使用WPF等时可以将不同的实现与服务一起使用。添加了新的责任或行为。
我是否正确?如果我错了可以请任何人解释原因吗?
由于
答案 0 :(得分:2)
我认为你是对的,并且帖子中有错误。来自文章:
Decorator模式允许您将现有类包装在新类中 class以实现接口。
这不完全正确 - 装饰器允许你将一个实现包装在另一个实现中,但目的通常不是实现另一个接口,而是用新功能“装饰”实例。适配器模式允许您使用两个不同的接口,并将一个实例修改为另一个实例。
答案 1 :(得分:2)
我同意你的看法,就像Adapter Pattern一样,就是ModelStateDictionary
是在接口IValidationDictionary
(适配器接口)后面使用具体类型抽象的(适配器)以便以后可以更改实现。
Decorator Pattern通常通过合成提供附加功能,公开与装饰类型相同的界面。这通常通过子类或通过接口实现来完成。
装饰器的一个例子是:
Get()
方法以首先检查项目的缓存来提供缓存提取和检索组合(并且将覆盖Save()
以更新缓存以及数据库)。