Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 为什么使用适配器设计模式_Design Patterns - Fatal编程技术网

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();