• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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
    
    

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

    您可能感兴趣的文章:
    • 设计模式中的观察者模式在Ruby编程中的运用实例解析
    • 实例解析Ruby设计模式开发中对观察者模式的实现
    • 深入剖析Ruby设计模式编程中对命令模式的相关使用
    • Ruby设计模式编程中对外观模式的应用实例分析
    • 详解组合模式的结构及其在Ruby设计模式编程中的运用
    • 设计模式中的模板方法模式在Ruby中的应用实例两则
    • 实例解析Ruby设计模式编程中Strategy策略模式的使用
    • 实例讲解Ruby使用设计模式中的装饰器模式的方法
    • Ruby设计模式编程中使用Builder建造者模式的实例
    • 详解Ruby设计模式编程中对单例模式的运用
    • Ruby设计模式编程之适配器模式实战攻略
    • Ruby使用设计模式中的代理模式与装饰模式的代码实例
    • 解析proxy代理模式在Ruby设计模式开发中的运用
    上一篇:Windows下Ruby+Watir自动化测试的环境搭建及数据读取
    下一篇:Ruby使用设计模式中的代理模式与装饰模式的代码实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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