1. 程式人生 > >設計模式例項(Lua)筆記之五(Bridge模式)

設計模式例項(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(),然後分別執行各自的邏輯。
注意:CNewCorp起到了橋樑的作用。可以分別增加產品和公司。

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()

執行結果,如下: