如何在不扩展类的情况下实现dynamic多态
我在采访中被问及如何在不扩展类的情况下实现dynamic多态性。 如何才能做到这一点?
装饰者devise模式 ,利用封装是你在找什么。
多态性通过inheritance:
class Cat { void meow() { // meow... } } class Lion extends Cat { }
通过封装的多态性(Decorator模式):
interface Cat { void meow(); } class Lion implements Cat { private Cat cat; void meow() { this.cat.meow(); } }
PS。 更多关于装饰者: http : //www.yegor256.com/2015/02/26/composable-decorators.html
简单的解决scheme是编写一个实现接口的类,而不是扩展一个基类。
另一个解决scheme是创build一个dynamic代理…这本质上是一个聪明的方式实现一个接口,而不明确写入类。 有关详细信息,请参阅Proxy
javadoc 。
是的,这些都是(或可以)装饰模式的例子,虽然这里的关键是实现技术,而不是devise模式。
根据我的经验,在大多数求职面试中,问题并不是太复杂,大部分时间只是棘手的问题,所以如果他们特别要求多态而不扩展类,那么我会说:
是的,你可以通过实现一个接口而不是扩展一个类来实现dynamic多态
那么如果他们要求更多的select,那么可以提出代理,模式或其他的东西。
希望能帮助到你!