首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类中具有“工厂”方法的类

子类中具有“工厂”方法的类
EN

Stack Overflow用户
提问于 2016-02-17 22:52:06
回答 1查看 43关注 0票数 0

我有一个类,它有一个“工厂”方法,它返回给定一个file_name的新实例。根据给定的文件类型,它需要以不同的方式构造对象。它也恰好是一个swig生成的类,它包装了一个c++类,我不确定这是否重要,但我包含了这个细节,以防发生这种情况。所以我在某个地方定义了这个类,其中包括这个new_from_file方法

代码语言:javascript
复制
class Wv::WvWaveList 
  def self.new_from_file file_name
     ... 
      Wv::WaveList.new
  end
  ....
end

我想添加一个方法copy_wave,所以我的第一个想法是子类并将它添加到那里,这样就可以这样做了。

代码语言:javascript
复制
class MyWaveList < Wv::WvWaveList
  def copy_wave
    ...        
  end
end

问题是new_from_file仍然返回Wv::WaveList而不是MyWaveList,所以不能对new_from_file返回的实例调用copy_wave

一个简单的解决方案就是在这里打开类并添加方法。

代码语言:javascript
复制
class Wv::WvWave
  def copy_wave
     ...
  end
end

另一种解决方案是让MyWaveList拥有一个Wv::WaveList的实例,并将所有适当的调用委托给该实例。

所以我只是想知道继承解决方案可能是什么?我只是现在看不出来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-18 15:26:45

我认为这应该有效

代码语言:javascript
复制
class Wv::WvWaveList 
  def self.new_from_file file_name
    ... 
    self.new
  end
  ....
end

因为self.new_from_file总是调用Wv::WaveList.new,所以它总是用该类实例化对象,甚至是从子类。但是,通过使用self,您可以对任何子类调用new_from_file,并且对象将属于正确的类:

代码语言:javascript
复制
>> a = MyWaveList.new_from_file "some_file"
=> #<MyWaveList:0x007fd473004318 @file_name="some_file">
>> a.class
=> MyWaveList
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35469384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档