我有一个具有一定数量明确定义的功能的接口。比方说:
interface BakeryInterface {
public function createCookies();
public function createIceCream();
}
这对于大多数接口实现都很有效,但是在某些情况下,我需要添加一些新功能(例如,可能已添加到新方法中createBrownies()
)。这样做的显而易见/天真的方法是扩展接口:
interface BrownieBakeryInterface extends BakeryInterface {
public function createBrownies();
}
但是有一个很大的缺点,就是我不能在不修改现有API的情况下添加新功能(例如,更改类以使用新接口)。
我正在考虑使用适配器在实例化后添加功能:
class BrownieAdapter {
private brownieBakery;
public function construct(BakeryInterface bakery) {
this->brownieBakery = bakery;
}
public function createBrownies() {
/* ... */
}
}
这会让我感到类似:
bakery = new Bakery();
bakery = new BrownieBakery(bakery);
bakery->createBrownies();
这似乎是解决该问题的好方法,但是我想知道是否通过这样做唤醒了老神。适配器是要走的路吗?是否有更好的模式可以遵循?还是我真的应该只是硬着头皮,只是扩展原始界面?