設計模式實例(Lua)筆記之五(Bridge模式)
1.描寫敘述
今天我要說說我自己,夢想中的我自己,我身價過億,有兩個大公司,一個是房地產公司,一個是服裝制造業,這兩個公司都非常賺錢,天天幫我在累加財富,事實上是什麽公司我倒是不關心,我關心的是是不是在賺錢,賺 了多少,這才是我關心的,我是商人呀,唯利是圖是我的本性,偷稅漏稅是我的方法,欺上瞞下、壓榨員工血汗 我是的手段嘛,呵呵。同一時候我公司也 會發展,最終在有一天我認為賺錢速度太慢,於是我上下疏通,左右打關系,最終開辟了一條賺錢的康莊大道:生產山寨產品,什麽產品呢?就是市場上什麽牌子的東西火爆我生產什麽牌子的東西,甭管是打火機還是電腦,僅僅要它火爆,我就生產,賺過了高峰期就換個產品,打一槍換一個牌子,不承擔售後成本、也不操心銷路問題,
那麽,我的服裝廠就開始變成山寨 iPod 生產車間,然後就看我的財富在積累積累,你想呀山寨的東西不須要特別的銷售渠道(正品到哪裏我就到哪裏),不須要維修成本(大不了給你換個,你還想咋地,過了高峰期我就改頭換面了你找誰維修去,投訴?投訴誰呢?),不承擔廣告成本(正品在打廣告,我還須要嗎?須要嗎?),可是我也有犯愁的時候,我這是個山寨工廠,要及時的生產出市場上流行產品,轉型要快,要靈活,今天從生產 iPod 轉為生產 MP4,明天再轉為生產上網本,這個都須要靈活的變化,不要限制的太死,那問題來了,每次我的廠房,我的工人,我的設備都在,不可能每次我換個山寨產品我的廠子就徹底不要了,這不行,成本忒高了點,那怎麽辦?請看類圖:
CNewCorp 類和 IProduct 類建立一個關聯關系,能夠徹底解決我以後山寨公司生產產品的問題了。
凝視:
main(),客戶
IProduct。產品接口
CHouse。房子
CIPod。ipod
CClothes,服裝
CNewCorp,橋梁類,MakeMoney()是橋梁方法
CNewHouseCorp,僅僅能生產房子,所以構造函數是CHouse*
CShanZhaiCorp,什麽賺錢就生產什麽,所以構造函數是IProduct*
說明:客戶直接使用CNewHouseCorp和CShanZhaiCorp類。在main()函數裏構造產品。然後傳到這兩個類裏。這兩個類的MakeMoney()函數,先調用基類的MakeMoney()。然後分別執行各自的邏輯。
2.代碼
require "class" -----------IProduct------------ IProduct = class() function IProduct:BeProducted() end function IProduct:BeSelled() end -- 註:事實上不須要繼承IProduct -----------House------------ House = class(IProduct) function House:BeProducted() print("生產出的房子是這個樣子的...") end function House:BeSelled() print("生產出的房子賣出去了...") end -----------Clothes------------ Clothes = class(IProduct) function Clothes:BeProducted() print("生產出的衣服是這個樣子的...") end function Clothes:BeSelled() print("生產出的衣服賣出去了...") end -----------IPod------------ IPod = class(IProduct) function IPod:BeProducted() print("生產出的ipod是這個樣子的...") end function IPod:BeSelled() print("生產出的ipod賣出去了...") end -- 橋梁-- -------------NewCorp-------------- NewCorp = class() function NewCorp:ctor(pproduct) self.m_pProduct = pproduct end function NewCorp:IMakeMoney() -- 每一個公司都是一樣,先生產 self.m_pProduct:BeProducted() -- 然後銷售 self.m_pProduct:BeSelled() end -------------NewHouseCorp-------------- NewHouseCorp = class(NewCorp) function NewHouseCorp:MakeMoney() self:IMakeMoney() print("房地產公司賺大錢了...") end -------------ShanZhaiCorp-------------- ShanZhaiCorp = class(NewCorp) function ShanZhaiCorp:MakeMoney() self:IMakeMoney() print("房地產公司賺大錢了...") end -------------DoNewRun Test-------------- function DoNewRun1() print("----------房地產公司是這樣執行的----------") local house = House.new() local newHouseCorp = NewHouseCorp.new(house) newHouseCorp:MakeMoney() print("----------山寨公司是這樣執行的----------") local clothes = Clothes.new() local shanZhaiCorp = ShanZhaiCorp.new(clothes) shanZhaiCorp:MakeMoney() end function DoNewRun2() print("----------房地產公司是這樣執行的----------") local house = House.new() local newHouseCorp = NewHouseCorp.new(house) newHouseCorp:MakeMoney() print("----------山寨公司是這樣執行的----------") local ipod = IPod.new() local shanZhaiCorp = ShanZhaiCorp.new(ipod) shanZhaiCorp:MakeMoney() end --- main --- function main() DoNewRun1() print("*********************************") DoNewRun2() end main()
執行結果,例如以下:
設計模式實例(Lua)筆記之五(Bridge模式)