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

标签 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();
   }
}

最佳答案

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

Adapter pattern applied

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

如果您选择扩展 A(即让 A 的接口(interface)成为客户端使用的接口(interface)),如果 A(您无法控制的第三方类)发生变化,您的客户端就会崩溃。

此外,如果您想支持新的第三方扩展,如何将其添加到您的设计中?

请注意,如果 A 在 Adapter 的“干净”应用程序(上文)中发生更改,则只有 ServiceAdapterA 会中断。另外,如果你添加新的第三方实现,你只需要创建一个新的适配器并使适配的服务方法起作用。

关于java - 可以在具体类上使用适配器模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22491368/

相关文章:

java - 在java中解析来自webservice的json数据

java - 存储在共享首选项中的值

java - 我的高级 for 循环有问题

c++ - 如何为我正在编写的《神之浩劫》迷你游戏创建和访问对象数组

java - 动态行为如何改变 Java 中的状态?

ios - 在 UITableViewCell 和 UICollectionViewCell 之间共享代码

android - 从 AsyncTask 管理 ProgressDialog 的最佳方式

java - 打印文本文件中的最后几行

c# - 覆盖嵌套类函数或使用委托(delegate)?**

laravel - Laravel 中的 Facade 是否实现了 Facade 或 Proxy 模式?