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