我有两个类似的具体类,由两个不同的第三方提供(我无法修改它们)。
如果我使用经典的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();
}
}
答案 0 :(得分:1)
适配器在适配器中提供protected variation客户端类,如果您按照描述应用它:
这意味着如果具体的第三方类发展,您可以为客户端提供一些保护。
如果您选择延长A(即,使A&#39的界面成为客户使用的界面),如果A(您无法控制的第三方课程)发生变化,您的客户将被破坏。
另外,如果您想支持新的第三方扩展程序,如何在设计中添加它?
请注意,如果A更改了" clean"应用Adapter(上面),只有ServiceAdapterA会中断。此外,如果添加新的第三方实现,您只需要创建一个新的适配器并使适应的服务方法有效。
答案 1 :(得分:0)
在这种情况下,我认为扩展是一个坏主意。想象一下,您正在围绕以下第三方类实施适配器:
class Person {
public void walk () { ... }
}
如果使用扩展程序,可以写:
class PersonAdapter extends Person {
}
然后拨打person.walk()
之类的电话。棒极了吧?
但是当你想隐藏行走时会发生什么?你必须弃用它,或者覆盖它 - 这两个丑陋的解决方案。
最好包装该类,然后只提供所需功能的接口。