我在一次采访中被问到如何在不扩展类的情况下实现动态多态性。如何才能做到这一点?
问问题
3883 次
3 回答
40
Decorator design pattern that exploits encapsulation is what you're looking for.
Polymorphism through inheritance:
class Cat {
void meow() {
// meow...
}
}
class Lion extends Cat {
}
Polymorphism through encapsulation (Decorator pattern):
interface Cat {
void meow();
}
class Lion implements Cat {
private Cat cat;
void meow() {
this.cat.meow();
}
}
ps. More about decorators: http://www.yegor256.com/2015/02/26/composable-decorators.html
于 2012-09-10T07:27:00.363 回答
30
简单的解决方案是编写一个实现接口而不是扩展基类的类。
另一种解决方案是创建一个动态代理......这本质上是一种无需显式编写类即可实现接口的聪明方法。有关详细信息,请参阅Proxy
javadoc。
是的,这些是(或可以是)装饰器模式的示例,尽管这里的关键是实现技术而不是设计模式。
于 2012-09-10T07:30:09.163 回答
3
根据我的经验,在大多数工作面试中,问题不会寻找过于复杂的答案,而且大多数时候只是棘手的问题,所以如果他们专门询问多态性而不扩展类,那么我会说:
是的,您可以通过实现接口而不是扩展类来实现动态多态性
那么如果他们要求更多的选择,那么提出代理、模式或其他东西就可以了。
希望能帮助到你!
于 2012-09-10T15:51:59.743 回答