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

2022-09-01 04:21:39

在一次采访中,有人问我如何在不扩展类的情况下实现动态多态性。如何做到这一点?


答案 1

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

通过继承的多态性:

class Cat {
  void meow() {
    // meow...
  }
}
class Lion extends Cat {
}

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

interface Cat {
  void meow();      
}
class Lion implements Cat {
  private Cat cat;
  void meow() {
    this.cat.meow();
  }
}

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


答案 2

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

另一种解决方案是创建一个动态代理...这本质上是一种实现接口的聪明方法,无需显式编写类。有关详细信息,请参阅代理 javadoc

是的,这些是(或可以是)装饰器模式的示例,尽管这里的关键是实现技术而不是设计模式。