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

2021-09-07 12:39:22 字數 3722 閱讀 7458

今天我要說說我自己,夢想中的我自己,我身價過億,有兩個大公司,乙個是房地產公司,乙個是服裝製造業,這兩個公司都非常賺錢,天天幫我在累加財富,事實上是什麼公司我倒是不關心,我關心的是是不是在賺錢,賺 了多少,這才是我關心的,我是商人呀,唯利是圖是我的本性,偷稅漏稅是我的方法,欺上瞞下、壓榨員工血汗 我是的手段嘛,呵呵。同一時候我公司也 會發展,最終在有一天我認為賺錢速度太慢,於是我上下疏通,左右打關係,最終開闢了一條賺錢的康莊大道:生產山寨產品,什麼產品呢?就是市場上什麼牌子的東西火爆我生產什麼牌子的東西,甭管是打火機還是電腦,僅僅要它火爆,我就生產,賺過了高峰期就換個產品,打一槍換乙個牌子,不承擔售後成本、也不操心銷路問題,

我僅僅有**的十分之中的乙個的**,你買不買?哈哈,賺錢呀! 

那麼,我的服裝廠就開始變成山寨 ipod 生產車間,然後就看我的財富在積累積累,你想呀山寨的東西不須要特別的銷售渠道(**到**我就到**),不須要維修成本(大不了給你換個,你還想咋地,過了高峰期我就改頭換面了你找誰維修去,投訴?投訴誰呢?),不承擔廣告成本(**在打廣告,我還須要嗎?須要嗎?),可是我也有犯愁的時候,我這是個山寨工廠,要及時的生產出市場上流行產品,轉型要快,要靈活,今天從生產 ipod 轉為生產 mp4,明天再轉為生產上網本,這個都須要靈活的變化,不要限制的太死,那問題來了,每次我的廠房,我的工人,我的裝置都在,不可能每次我換個山寨產品我的廠子就徹底不要了,這不行,成本忒高了點,那怎麼辦?請看類圖:

cnewcorp 類和 iproduct 類建立乙個關聯關係,能夠徹底解決我以後山寨公司生產產品的問題了。

凝視:main(),客戶

iproduct。產品介面

chouse。房子

cipod。ipod

cclothes,服裝

cnewcorp,橋梁類,makemoney()是橋梁方法

cnewhousecorp,僅僅能生產房子,所以建構函式是chouse*

cshanzhaicorp,什麼賺錢就生產什麼,所以建構函式是iproduct*

說明:客戶直接使用cnewhousecorp和cshanzhaicorp類。在main()函式裡構造產品。然後傳到這兩個類裡。這兩個類的makemoney()函式,先呼叫基類的makemoney()。然後分別執行各自的邏輯。

注意:cnewcorp起到了橋梁的作用。能夠分別新增產品和公司。

require "class"

-----------iproduct------------

iproduct = class()

function iproduct:beproducted()

endfunction iproduct:beselled()

end-- 注:事實上不須要繼承iproduct

-----------house------------

house = class(iproduct)

function house:beproducted()

print("生產出的房子是這個樣子的...")

endfunction house:beselled()

print("生產出的房子賣出去了...")

end-----------clothes------------

clothes = class(iproduct)

function clothes:beproducted()

print("生產出的衣服是這個樣子的...")

endfunction clothes:beselled()

print("生產出的衣服賣出去了...")

end-----------ipod------------

ipod = class(iproduct)

function ipod:beproducted()

print("生產出的ipod是這個樣子的...")

endfunction ipod:beselled()

print("生產出的ipod賣出去了...")

end-- 橋梁--

-------------newcorp--------------

newcorp = class()

function newcorp:ctor(pproduct)

self.m_pproduct = pproduct

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

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

endmain()

執行結果,例如以下:

設計模式筆記之五 命令模式

命令模式的定義 將請求封裝成物件,以便使用不同的請求 佇列或者日誌來引數化其他物件。命令模式也支援可撤銷的操作。uml圖 暫略 例子 命令介面類 public inte ce icommand 具體的命令實現類1 public class concretecommand1 implements ic...

lua設計模式之抽象工廠模式

父類a iuser function iuser new o o o or setmetatable o,self self.index self return o end 父類a的子類a1 sqlserveruser iuser new function sqlserveruser insert ...

設計模式之單例項模式

例項,也就是物件,單例項,就是只能有乙個物件。那怎樣才能讓乙個類只能例項化乙個物件呢?很簡單,首先需要讓類的構造方法私有化,這樣外界就不能隨意的例項化物件了。接著,提供乙個公共的靜態的方法返回這個物件,讓外界得到這個類的物件。以乙個學生類為例 package com.techck.file auth...