我有一个 OO 设计问题。
我正在使用工厂模式来创建适合我传递工厂的参数的类的对象。但是,有些属性我只能在创建对象后才能获得,然后我想用它们来进一步子类化或“专门化”对象的类型。
我需要多态的子类来为具有附加输入参数的对象使用自定义逻辑。
我认为这是一些设计模式“在运行时重新确定对象类”。我该如何实施?哦,可能是不好的做法?
我有一个 OO 设计问题。
我正在使用工厂模式来创建适合我传递工厂的参数的类的对象。但是,有些属性我只能在创建对象后才能获得,然后我想用它们来进一步子类化或“专门化”对象的类型。
我需要多态的子类来为具有附加输入参数的对象使用自定义逻辑。
我认为这是一些设计模式“在运行时重新确定对象类”。我该如何实施?哦,可能是不好的做法?
您不能在运行时更改对象类型。如果您有基类的实例,那么它将保持基类类型。但是您可以在运行时创建新对象。使用组合而不是继承。
即,不是从您的基类继承,而是创建另一个对象层次结构 - 提取到新类(不是从您的基类继承)代码,该代码在您的基对象创建后发生变化。这可能是某种策略。然后在运行时为您的基对象提供不同的策略实现(即“专门化”基类实例)。
无法更改实例化对象的类型,但我看到 2 种可能的解决方法:
1. 从您的初始工厂实例化另一个工厂,最终将创建所需类型的对象。
2. 利用 Ruby 的“方法缺失”概念与 ExpandoObject。我不确定它是否适合您的情况。