aly1 = New AssemblyPart("bulb") p1 = New PiecePart("body", 88.25) aly1.Add(p1) p1 = New PiecePart("head", 100.5) aly1.Add(p1)
aly2 = New AssemblyPart("light") aly2.Add(aly1) p1 = New PiecePart("cover", 10) aly2.Add(p1) Messagebox.Show(aly2.Name() + "'s cost = " + str(aly2.Cost()))
p1 = aly2.GetChild(0) Messagebox.Show(p1.Name + "'s cost = " + str(p1.Cost()))
p2 = aly2.GetChild(1) Messagebox.Show(p2.name + "'s cost = " + str(p2.Cost()))
p2 = p1.GetChild(0) Messagebox.Show(p2.Name + "'s cost = " + str(p2.Cost())) End Sub End Class
此程序输出: light's cost = 198.75 bulb's cost = 188.75 cover's cost = 10 body's cost = 88.25
PiecePart 代表最下层的基本对象。而AssemblyPart则代表中层的半成品对象组件﹐或代表成品。Part为一个抽象类别,定义PiecePart与AssemblyPart类别的共同部份(包括属性和行为),供PiecePart与AssemblyPart子类别来继承之。此外,提供一个接口IPart给Client使用,以封装Part、PiecePart和AssemblyPart类别,创造Part、PiecePart和AssemblyPart类别的弹性调整空间,这是非常重要的。 Form1_Click()程序建立了有关「汽车车灯」的对象结构表﹕
图8、VB程序所诞生的对象关系图
p1 = aly2.GetChild(0)取出「灯泡」小对象﹐并由p1代表这个小对象。p2 = p1.GetChild(0) 取出「灯帽」小对象﹐并由p2代表之。依上述之样式﹐可表达出无限层次的递归式Whole-part关系。 为了让软件能永续生存下去﹐必须特别重视软件的组织与其整体架构(architecture)。于是﹐设计软件时,必须专注于对象之间的互助合作关系。一旦建立了理想的关系﹐就可以让对象之间互相传递讯息、互相沟通了。例如﹐Form1 对象传送Cost讯息给aly2对象﹐aly2对象就依循ArrayList对象所建立的关系来将Cost讯息递给内含之各小对象。当各小对象回报其成本金额﹐aly2将之累计再传送回到Form1 对象﹐然后显示在窗口画面上。此刻﹐相信您已经进一步了解Whole-part关系﹐善用ArrayList集合类别来表达之,并更会运用VB来落实样式,创造出更美好的软件。■
[注1] Erich Gamma,Design Patterns: Elements of Reusable Object-Oriented Software, Addition-Wesley, 1995.
(编辑:aniston)
|