zoukankan      html  css  js  c++  java
  • 《大话设计模式》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

     这样写的好处是降低耦合。

    比如增加一个开根号运算的时候,只需要在工厂类中添加一个分支,并新建一个开根号类,不会去动到其他的类。

  • 相关阅读:
    内置函数——filter和map
    递归函数
    内置函数和匿名函数
    迭代器和生成器
    装饰器函数
    函数进阶
    COGS 2533. [HZOI 2016]小鱼之美
    COGS 2532. [HZOI 2016]树之美 树形dp
    COGS2531. [HZOI 2016]函数的美 打表+欧拉函数
    bzoj1303: [CQOI2009]中位数图
  • 原文地址:https://www.cnblogs.com/fanxiaopeng/p/4176659.html
Copyright © 2011-2022 走看看