我有兩個類似的具體類,由兩個不同的第三方提供(我不能修改它們)。好的在混凝土類上使用適配器模式?
是否確定,如果我使用了經典的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();
}
}
** **是BAdapter嗎?A?如果是這樣,那麼這可能是合理的。另外,你確定通過不調用'super.doSomething()',你不會打破'A'的不變式(請記住,實現者當他們確實不總是使用'final'和/或文檔副作用應該有)?這看起來有點像代碼味道,但是如果沒有更多的信息就不可能提供更多的建議(例如,*爲什麼*你需要這個適配器嗎?你可以舉一個更具體的例子嗎?) –
我忘記了在原始文章中這兩個班來自兩個不同的第三方。我從第三方接收使用類A的輸入,該類需要使用類B發佈給其他第三方。因此,我收到了類A的一個實例,但我需要將它轉換爲類B的一個實例,以便我可以發送它到另一個第三方。這就是爲什麼我需要適配器。希望這是有道理的。 – methodex
我的直覺反應是否定的。一個適配器被用來提供你自己的界面。通過擴展這個類,你打開了對實際對象的調用。我認爲使用'有'關係是一個更好的主意。 – sdasdadas