初期化パラメータに応じて具体的なインスタンスを作成する抽象クラスを作成したいと思います。例:
class SomethingGeneric
def self.new(type, arg)
class_name = "#{type.capitalize}Something"
if obj.const_defined?(class_name)
a_class = obj.const_get(class_name)
else
raise ArgumentError, "Concrete something '#{type}' was not found"
end
obj = a_class.new(arg)
return obj
end
end # class
次に、FooSomething < SomethingGeneric、BarSomething < SomethingGeneric などが必要です。それから私がするとき:
obj = SomethingGeneric.new("foo", arg)
FooSomething インスタンスを取得します。
ここでの問題は、「新しい」方法です。私はSomethingGeneric.newを定義しましたが、FooSomethingとBarSomethingはSomethingGenericのサブクラスであるため、ここでは間違った引数で呼び出される「新しい」メソッドを継承しています:
obj = a_class.new(arg)
解決策の 1 つは、ファクトリ メソッド「new」に別の名前を使用することです。ただし、利便性にこだわり、「new」という名前の抽象スーパークラス ファクトリ メソッドを維持したいと考えています。
この問題を解決する最もクリーンで正しい方法は何ですか?