如何在不扩展类的情况下实现动态多态

Rah*_*ngh 37 java oop polymorphism design-patterns

我在接受采访时被问到如何在不扩展课程的情况下实现动态多态性.如何才能做到这一点?

yeg*_*256 41

利用封装的装饰器设计模式是您正在寻找的.

通过继承进行多态性:

class Cat {
  void meow() {
    // meow...
  }
}
class Lion extends Cat {
}
Run Code Online (Sandbox Code Playgroud)

通过封装的多态性(装饰模式):

interface Cat {
  void meow();      
}
class Lion implements Cat {
  private Cat cat;
  void meow() {
    this.cat.meow();
  }
}
Run Code Online (Sandbox Code Playgroud)

PS.有关装饰器的更多信息:http://www.yegor256.com/2015/02/26/composable-decorators.html


Ste*_*n C 30

简单的解决方案是编写一个实现接口而不是扩展基类的类.

另一个解决方案是创建一个动态代理...这实际上是一种在没有显式编写类的情况下实现接口的聪明方法.有关详细信息,请参阅Proxyjavadoc.

是的,这些是(或可能是)装饰器模式的例子,虽然这里的关键是实现技术而不是设计模式.