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

設計模式實例(Lua)筆記之五(Bridge模式)

制造 ria 先生 關聯 賣出 都在 int 每一個 賺大錢

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

執行結果,例如以下:

技術分享

設計模式實例(Lua)筆記之五(Bridge模式)