南强小屋 Design By 杰米
之前有看过《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
相比于简单工厂模式,这里的变化是移除了工厂类,取而代之的是具体的运算工厂,分别是加法工厂、减法工厂、乘法工厂和除法工厂。
南强小屋 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
南强小屋 Design By 杰米
暂无Ruby中使用设计模式中的简单工厂模式和工厂方法模式的评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。