it编程 > 前端脚本 > Ruby

Ruby中使用设计模式中的简单工厂模式和工厂方法模式

154人参与 2024-05-19 Ruby

之前有看过《ruby设计模式》,不过渐渐的都忘记了。现在买了一个大话设计模式,看起来不是那么枯燥,顺便将代码用ruby实现了一下。

简单工厂模式:

# -*- encoding: utf-8 -*-

#运算类
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 = 1
oper.number_b = 2
p oper.result

这样写的好处是降低耦合。
比如增加一个开根号运算的时候,只需要在工厂类中添加一个分支,并新建一个开根号类,不会去动到其他的类。

工厂方法模式:

# -*- encoding: utf-8 -*-

#运算类
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


module factorymodule
 def create_operation
 end
end
#加法工厂
class addfactory
 include factorymodule
 
 def create_operation
  operationadd.new
 end 
end

#减法工厂
class subfactory
 include factorymodule
 
 def create_operation
  operationsub.new
 end
end
#乘法工厂
class mulfactory
 include factorymodule
 
 def create_operation
  operationmul.new
 end 
end
#除法工厂
class divfactory
 include factorymodule
 
 def create_operation
  operationdiv.new
 end 
end

factory = addfactory.new
oper = factory.create_operation
oper.number_a = 1
oper.number_b = 2
p oper.result

相比于简单工厂模式,这里的变化是移除了工厂类,取而代之的是具体的运算工厂,分别是加法工厂、减法工厂、乘法工厂和除法工厂。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

Ruby使用设计模式中的代理模式与装饰模式的代码实例

05-19

Windows下Ruby+Watir自动化测试的环境搭建及数据读取

05-19

Ruby设计模式编程之适配器模式实战攻略

05-19

Windows下安装配置Ruby的debug工具ruby-debug-base19

05-19

详解Ruby设计模式编程中对单例模式的运用

05-19

CentOS7下搭建ruby on rails开发环境

05-19

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论