可以在具体类上使用适配器模式吗?

时间:2014-03-18 21:24:31

标签: java oop design-patterns

我有两个类似的具体类,由两个不同的第三方提供(我无法修改它们)。

如果我使用经典的GoF适配器模式但是我的适配器扩展了具体的目标类是否可以?或者这很糟糕?

示例:

public class A {
   public void doSomething() {
      // some code
   }
}

public class B {
   public void similarDoSomethingMethod() {
      // some code
   }
}


public class BAdapter extends A {
   private B b;

   public BAdapter(B b) {
      this.b = b;
   }
   @Overrides
   public void doSomething() {
      b.similarDoSomethingMethod();
   }
}

2 个答案:

答案 0 :(得分:1)

适配器在适配器中提供protected variation客户端类,如果您按照描述应用它:

Adapter pattern applied

这意味着如果具体的第三方类发展,您可以为客户端提供一些保护。

如果您选择延长A(即,使A&#39的界面成为客户使用的界面),如果A(您无法控制的第三方课程)发生变化,您的客户将被破坏。

另外,如果您想支持新的第三方扩展程序,如何在设计中添加它?

请注意,如果A更改了" clean"应用Adapter(上面),只有ServiceAdapterA会中断。此外,如果添加新的第三方实现,您只需要创建一个新的适配器并使适应的服务方法有效。

答案 1 :(得分:0)

在这种情况下,我认为扩展是一个坏主意。想象一下,您正在围绕以下第三方类实施适配器:

class Person {

    public void walk () { ... }

}

如果使用扩展程序,可以写:

class PersonAdapter extends Person {

}

然后拨打person.walk()之类的电话。棒极了吧?

但是当你想隐藏行走时会发生什么?你必须弃用它,或者覆盖它 - 这两个丑陋的解决方案。

最好包装该类,然后只提供所需功能的接口。