《大話設計模式》ruby版代碼:代理模式

來源:互聯網
上載者:User

標籤:

需求:

小明讓小李替他追小麗(送洋娃娃,送花,送巧克力)

沒有代理的代碼:

# -*- encoding: utf-8 -*-#追求者類class Pursuit    attr_accessor :mm        def initialize(mm)        @mm = mm    end        def give_dolls        puts "#{mm.name} 送你洋娃娃"    end        def give_flowers        puts "#{mm.name} 送你鮮花"    end        def give_chocolate        puts "#{mm.name} 送你巧克力"    endend#被追求者類class Girl    attr_accessor :name        def initialize(name)        @name = name    endendxiao_hong = Girl.new(‘小紅‘)xiao_ming = Pursuit.new(xiao_hong)xiao_ming.give_dollsxiao_ming.give_flowersxiao_ming.give_chocolate

只有代理的代碼:

# -*- encoding: utf-8 -*-#代理類class Proxy    attr_accessor :mm        def initialize(mm)        @mm = mm    end        def give_dolls        puts "#{mm.name} 送你洋娃娃"    end        def give_flowers        puts "#{mm.name} 送你鮮花"    end        def give_chocolate        puts "#{mm.name} 送你巧克力"    endend#被追求者類class Girl    attr_accessor :name        def initialize(name)        @name = name    endendxiao_hong = Girl.new(‘小紅‘)xiao_ming = Proxy.new(xiao_hong)xiao_ming.give_dollsxiao_ming.give_flowersxiao_ming.give_chocolate

只是把追求者類換成了代理類。

實際的代理模式代碼:

# -*- encoding: utf-8 -*-#公用介面modulemodule GiveGift    def give_dolls    end        def give_flowers    end        def give_chocolate    endend#追求者類class Pursuit    include GiveGift    attr_accessor :mm, :name        def initialize(mm)        @mm = mm    end        def give_dolls        puts "#{mm.name} 替#{name}送你洋娃娃"    end        def give_flowers        puts "#{mm.name} 替#{name}送你鮮花"    end        def give_chocolate        puts "#{mm.name} 替#{name}送你巧克力"    endend#代理類class Proxy    include GiveGift    attr_accessor :gg        def initialize(mm)        @gg = Pursuit.new(mm)    end        def give_dolls        gg.give_dolls    end        def give_flowers        gg.give_flowers    end        def give_chocolate        gg.give_chocolate    endend#被追求者類class Girl    attr_accessor :name        def initialize(name)        @name = name    endendxiao_hong = Girl.new(‘小紅‘)xiao_ming = Proxy.new(xiao_hong)xiao_ming.gg.name = ‘小明‘xiao_ming.give_dollsxiao_ming.give_flowersxiao_ming.give_chocolate

 

代理模式:為其他對象提供一種代理以控制對這個對象的訪問。

應用情境:

  • 遠程代理

為一個對象在不同的地址提供局部代表,這樣就可以隱藏一個對象存在於不同地址空間的事實。

  • 虛擬代理

是根據需要建立開銷很大的對象。通過它來存放執行個體化需要很長時間的真實對象。

  • 安全代理

用來控制真是對象訪問時的許可權。

  • 智能代理

當調用真實對象時,代理處理另外一些事。

《大話設計模式》ruby版代碼:代理模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.