Design Pattern Structural Model

出自VFP Wiki

跳轉到: 導航, 搜尋


目錄

Design Pattern Structural Model

本文原載於:http://blog.yam.com/saint0612/archives/2010700.html。 已經過原作者同意,轉載於此。

我為何會想要做這一個Design P attern 這也不是我想出來的,早在我看到這篇文章(.NET中Design Pattern Structural 模式)我就有想過要套用在FOXPRO中,因為,我覺得目前在使用FOXPRO的人都沒有一個習慣,就是如何去設計,設計模式在C,JAVA,.NET….都有不少的文章在討論,所以我想我會.NET 不如就把我自己會轉到FOXPRO來,讓大家有不一樣的感覺,哦…原來程式也可以如此設計,所以我花了點時間來做

說明

這樣的模式通常會涉及二個或是二個以上的物件互相組織在一起,利用這樣的方式可以做出更大,更複雜的系統,由於物件之間的組合並沒有一定的規則,通常是決定於需求,所以這樣的設計方式來說會較有彈性,而系統之間也不會相互影響,也因此這一種設計方式,可以從小系統開始一直愈改愈大,也可以和系統更緊密的結合

設計說明

為了要讓大家更清楚的了解,如何來設計,那我就用現在滿流行的一個遊樂器,Xbox 來做一個Demo,而這一個Xbox 我們要讓有三種功能

  • 玩game
  • 希望可以上網
  • 還可以上網時收個人的mail

即然功能都列出來了,現在就開始設計,要可以玩game ,那就給你一個game object 所以我就先定了一個class 叫做 game_box 而這一個class 中最要的就是 play game,請參考(game_box.prg )

要上網,就再訂一個可以上網的class ,那收mail 尤於是要上網才能收,所以就把這一個收信的動作,放到這一個class 中(internet_box.prg)

測試

最後,要放入到xbox中時,我們分別要做一些測試,也就是在 Extreme program 中所提到的測試程式,為了確保有良好的品質,所以在裝機前 裝到xbox前,先測一下這二個object 是否可以正常運作請參考 Test_game_box.prg Test_internet_box.prg 如果測出來的結果是符合你需求的功能,如此可以把這二個 object 正式放到 Xbox中做整合測試 整合測試 尤由之前的測試都沒有問題,所以把東西放進來做整合測試 參考 Test_x_box.prg 而整個測出也是符合你的要求,我想這一個程式應該可以出貨了 ^_^

結論

這一個 Design Pattern 是一個不錯的設計,有興趣的人可以去www.netmag.com.tw 找出最原始的說明,或是去 MS 網站找或是 JAVA site 也有相關的討論

程式碼
&&
&& test game_box
&&
clear
locallo_game_box,lc_current_path,lc_game_box_path,lc_internet_box_path,lc_x_box_path
lc_current_path = ADDBS(JUSTPATH(SYS(16,0)))
?lc_current_path
lc_game_box_path = lc_current_path + "game_box.prg"
set procedure to (lc_game_box_path) additive
lo_game_box = createobject("game_box")
?lo_game_box.play_game()
&&
&& test internet box 相關功能
&&
clear
locallo_internet,lc_current_path,lc_internet_box_path
lc_current_path = ADDBS(JUSTPATH(SYS(16,0)))
?lc_current_path
lc_internet_box_path = lc_current_path + "internet_box.prg"
set procedure to (lc_internet_box_path)additive
lo_internet = createobject("internet_box")
?lo_internet.connect_to_internet()
?lo_internet.get_mail()
&& 
&& test xbox 相關功能
&&
clear
local lc_current_path,lc_game_box_path,lc_internet_box_path,lc_x_box_path
lc_current_path = ADDBS(JUSTPATH(SYS(16,0)))
?lc_current_path
lc_game_box_path = lc_current_path+"game_box.prg"
lc_internet_box_path=lc_current_path+"internet_box.prg"
lc_x_box_path = lc_current_path + "x_box.prg"
set procedure to (lc_game_box_path) additive
set procedure to (lc_internet_box_path)additive
set procedure to (lc_x_box_path) additive
local lo_xbox lo_xbox = createobject("x_box")
*--test 是否可以正常玩game
lo_xbox.play_game()
*-- 可否連上internet
lo_xbox.connect_to_internet()
*--可否收mail
lo_xbox.get_mail()
&&
&& game_box
&&
define class game_box as custom
procedure play_game
? "我們可以一起玩Game"
endproc enddefi
&&
&& internet_box
&&
define class internet_box as custom
procedure connect_to_internet
?"現在連上線了"
endproc
*---
procedure get_mail
?"收信中"
endproc
enddefi
&&
&& x_box
&&
define class x_box as custom
hidden gamebox
hidden internetbox
gamebox = null
internetbox = null
*---
procedure init
this.gamebox = createobject("game_box")
this.internetbox = createobject("internet_box")
endproc
*---
procedure play_game
?"我要玩Game"
this.gamebox.play_game()
endproc
*---
procedure connect_to_internet
?"我要上網"
this.internetbox.connect_to_internet()
endproc
*---
procedure get_mail
?"我想收信"
this.internetbox.get_mail()
endproc

enddefi