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

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

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

  • 相关阅读:
    纹理贴图的模式设置
    vs debug或者release文件夹下的 .exe文件
    subpixel的概念
    点乘
    设置开机时自动开启和关闭的软件
    CF553E Kyoya and Train
    CF960G Bandit Blues
    玩游戏
    「SWTR03」Counting Trees
    CF623E Transforming Sequence
  • 原文地址:https://www.cnblogs.com/fanxiaopeng/p/4176659.html
Copyright © 2011-2022 走看看