Design patterns 为什么使用适配器设计模式
因此,我正在研究适配器设计模式。我看到这样做的目的是允许客户机访问类中接口不兼容的方法 现在我一直在看Design patterns 为什么使用适配器设计模式,design-patterns,Design Patterns,因此,我正在研究适配器设计模式。我看到这样做的目的是允许客户机访问类中接口不兼容的方法 现在我一直在看 ShoppingPortalClient无法直接使用适配器,因为适配器的接口不是itatarget(它所期望的)。换句话说,VendorAdaptee没有GetProducts()方法,它有一个GetListOfProducts()方法。这些是不同的接口。这不适用于ShoppingPortalClient使用的现有库存管理系统。该示例实际上没有意义。没有理由在ShoppingPortalCli
ShoppingPortalClient
无法直接使用适配器,因为适配器的接口不是itatarget
(它所期望的)。换句话说,VendorAdaptee
没有GetProducts()
方法,它有一个GetListOfProducts()
方法。这些是不同的接口。这不适用于ShoppingPortalClient
使用的现有库存管理系统。该示例实际上没有意义。没有理由在ShoppingPortalClient
中使用适配器,因为该类不需要使用ITarget
接口
如果它必须在某个地方传递一个
ITarget
,例如,如果它必须在不同的类中调用performSomeOperation(ITarget)
,那么创建一个适配器来传递是有意义的。感谢您的回复。我不太确定我是否同意这一点,因为我相信ITarget是作为整个适配器设计模式的一部分创建的。所以,如果你只拥有主设备和供应商适配器,为什么我们不能只拥有新的供应商适配器。不,这是不对的。ITarget的存在是因为客户端依赖它,而不是因为适配器需要它。适配器需要它只是因为客户机需要它,这就是使用适配器的全部意义,也是为什么这个模式首先存在的原因。客户机需要一个接口。适配器具有完全不同的接口。适配器将两者连接起来。您发布的文章的作者甚至在Main中将适配器键入为itargetadapter
。从您发布的文章中可以看出:“ITarget:这是客户端用来实现功能的接口。”感谢Reafael。是的,在你的评论之后,我重新读了一遍,现在它有了意义。因此,正如您所提到的,ITarget是客户端所依赖的。谢谢干杯。可能是重复的
interface ITarget
{
List<string> GetProducts();
}
public class VendorAdaptee
{
public List<string> GetListOfProducts()
{
List<string> products = new List<string>();
products.Add("Gaming Consoles");
products.Add("Television");
products.Add("Books");
products.Add("Musical Instruments");
return products;
}
}
class VendorAdapter:ITarget
{
public List<string> GetProducts()
{
VendorAdaptee adaptee = new VendorAdaptee();
return adaptee.GetListOfProducts();
}
}
class ShoppingPortalClient
{
static void Main(string[] args)
{
ITarget adapter = new VendorAdapter();
foreach (string product in adapter.GetProducts())
{
Console.WriteLine(product);
}
Console.ReadLine();
}
}
var adaptee = new VendorAdaptee();