简单工厂模式代理示例

class Operation
  attr_accessor :number_a, :number_b

  def initialize(number_a=nil, number_b=nil)
    @number_a = number_a
    @number_b = number_b
  end

  def result
    0
  end
end

class OperationAdd < Operation
  def result
    number_a + number_b
  end
end

class OperationSub < Operation
  def result
    number_a - number_b
  end
end

class OperationMul < Operation
  def result
    number_a * number_b
  end
end

class OperationDiv < Operation
  def result
    raise "除数不能为0" if number_b == 0
    number_a / number_b
  end
end

#工厂类
class OperationFactory
  def self.create_operate(operate)
    case operate
    when '+'
      OperationAdd.new()
    when '-'
      OperationSub.new()
    when '*'
      OperationMul.new()
    when '/'
      OperationDiv.new()
    end
  end
end

oper = OperationFactory.create_operate("*")
oper.number_a = 2
oper.number_b = 2
p oper.result

这个是简单工厂模式的一个实现形式,如果要增加一个算法,比如开根号,只要在工厂类中添加一个分支,并且建立一个开根号类。

results matching ""

    No results matching ""