Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby上的FactoryMethod模式_Ruby_Oop_Solid Principles_Factory Method - Fatal编程技术网

Ruby上的FactoryMethod模式

Ruby上的FactoryMethod模式,ruby,oop,solid-principles,factory-method,Ruby,Oop,Solid Principles,Factory Method,我正在学习设计模式。您认为它是FactoryMethod模式的合适示例吗 有单位及其子类:士兵和医生。他们可以打招呼。还有联合工厂、军人工厂和医生工厂。他们按单位生产 class Unit class GreetError < StandardError; end def greet; raise GreetError; end end class Soldier < Unit def greet; 'I am a soldier'; end end class D

我正在学习设计模式。您认为它是FactoryMethod模式的合适示例吗

有单位及其子类:士兵和医生。他们可以打招呼。还有联合工厂、军人工厂和医生工厂。他们按单位生产

class Unit
  class GreetError < StandardError; end

  def greet; raise GreetError; end
end

class Soldier < Unit
  def greet; 'I am a soldier'; end
end

class Doctor < Unit
  def greet; 'I am a doctor'; end
end

class UnitFactory
  class CreateUnitError < StandardError; end

  def create_unit; raise CreateUnitError; end
end

class SoldierFactory < UnitFactory
  def create_unit; Soldier.new; end
end

class DoctorFactory < UnitFactory
  def create_unit; Doctor.new; end
end

class Army
  attr_reader :unit_factory, :count, :units

  def initialize(unit_factory, count)
    @unit_factory = unit_factory
    @count = count
    @units = []

    gather
  end

  def gather
    count.times { units << unit_factory.create_unit }
  end

  def greet
    units.map { |unit| unit.greet }
  end
end
类单位
类标准错误;结束
问候;引起恐慌;结束
结束
班士兵<单位
def问候我是一名士兵;结束
结束
班级医生<单位
def问候我是医生;结束
结束
类单位工厂
类CreateUnitError数一下{单位别忘了医生!没人会受伤的!别忘了医生!没人会受伤的