《大话设计模式》ruby版代码:外观模式

需求:

股民买卖股票

初步代码:

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

#股票1
class Stock1
    def buy
        puts '股票1买入'
    end
    
    def sell
        puts '股票1卖出'
    end
end

#股票2
class Stock2
    def buy
        puts '股票2买入'
    end
    
    def sell
        puts '股票2卖出'
    end
end

#股票3
class Stock3
    def buy
        puts '股票3买入'
    end
    
    def sell
        puts '股票3卖出'
    end
end

#国债1
class NationalDebt1
    def buy
        puts '国债1买入'
    end
    
    def sell
        puts '国债1卖出'
    end
end

#房地产1
class Realty1
    def buy
        puts '房地产1买入'
    end
    
    def sell
        puts '房地产1卖出'
    end
end
s1 = Stock1.new
s2 = Stock2.new
s3 = Stock3.new
n1 = NationalDebt1.new
r1 = Realty1.new

s1.buy
s2.buy
s3.buy
n1.buy
r1.buy

s1.sell
s2.sell
s3.sell
n1.sell
r1.sell

问题:

可以发现用户需要了解股票、国债、房产情况,需要参与这些项目的具体买和卖,耦合性很高。

改进代码

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

#股票1
class Stock1
    def buy
        puts '股票1买入'
    end
    
    def sell
        puts '股票1卖出'
    end
end

#股票2
class Stock2
    def buy
        puts '股票2买入'
    end
    
    def sell
        puts '股票2卖出'
    end
end

#股票3
class Stock3
    def buy
        puts '股票3买入'
    end
    
    def sell
        puts '股票3卖出'
    end
end

#国债1
class NationalDebt1
    def buy
        puts '国债1买入'
    end
    
    def sell
        puts '国债1卖出'
    end
end

#房地产1
class Realty1
    def buy
        puts '房地产1买入'
    end
    
    def sell
        puts '房地产1卖出'
    end
end

#基金类
class Fund
    attr_accessor s1, s2, s3, n1, r1
    
    def initialize
        s1 = Stock1.new
        s2 = Stock2.new
        s3 = Stock3.new
        n1 = NationalDebt1.new
        r1 = Realty1.new
    end
    
    def buy
        s1.buy
        s2.buy
        s3.buy
        n1.buy
        r1.buy
    end
    
    def sell
        s1.sell
        s2.sell
        s3.sell
        n1.sell
        r1.sell
    end
end

f1 = Fund.new
f1.buy
f1.sell

 好处:用户不需要了解各种股票,只需购买卖出基金即可。

 

外观模式:

为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

posted @ 2015-01-14 21:33  范孝鹏  阅读(139)  评论(0编辑  收藏  举报