有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

动态向对象添加属性的java设计模式

考虑到我们有一个汽车物体。加速中断功能使用策略模式实现。但是,如果我们想将硝基气体功能引入现有的汽车对象,该怎么办?我可以使用什么样的设计模式

我想在创建汽车对象后添加nitro功能(属性)


共 (4) 个答案

  1. # 1 楼答案

    装饰器模式可以动态地向对象添加不同的功能。但这些功能必须在具体的装饰器中实现。开发人员可以决定在运行时添加哪些功能

  2. # 2 楼答案

    如果要添加新方法,则需要创建新的子类和/或使用委派。如果“nitro”特性需要显式方法调用才能激活,则这是必需的

    然而,如果您只想添加现有功能而不添加方法,那么Decorator是一个不错的选择。假设接口“Car”有一个名为floorIt()的方法。在这种情况下,您可以使用Decorator向Floorrit添加“nitro kick”,而无需添加到汽车接口

    当然,有一个中间立场。如果使用运行时类型发现和/或多个接口,则可以同时使用Decorator和向结果对象添加方法

  3. # 3 楼答案

    在静态类型语言中,不能在运行时向对象添加方法。编译器,当它遇到像:car这样的语句时。nitroAccelerate(),检查汽车对象是否实现了任何具有nitroAccelerate方法的接口。如果您可以在运行时添加(或删除)方法,那么这样的检查将是不可能的

    动态语言允许在运行时添加方法。但这有一个缺点,当你把车。nitroAccelerate()在代码中,您需要仔细分析此时的car对象是否有这样的方法

    可以在运行时使用decorator修改现有方法,但这样做并不是修改现有对象,而是创建一个新对象来封装旧对象

    所以,如果你做了如下事情:

    Car fasterCar = new CarWithNitro(car);
    

    你的一些代码仍然引用了原始的汽车,这个原始的汽车不会更快,因为包装的行为不会修改原始的汽车

  4. # 4 楼答案

    您可以检查Decorator pattern,它可以用于动态地向现有对象添加功能