?? bridgepattern.htm
字號:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="css/stdlayout.css" type="text/css">
<link rel="stylesheet" href="css/print.css" type="text/css">
<meta content="text/html; charset=gb2312" http-equiv="content-type">
<title>Bridge 模式</title>
</head>
<body>
<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>
<h1><a href="CppGossip.html">Design Pattern: Bridge 模式</a></h1>
在 <a href="GoF.htm">Gof 的書</a>中指到Bridge模式的目的:“將抽象部份與它的實現部份分離,使它們都可以獨立地變化。”<br>
<br>
這句話寫得簡短,這邊再作進一步的解釋,抽象部份指的是行為方面定義,實現方面指的是與特定平臺相依的代碼實現。<br>
<br>
一個實際的例子在Gof書中有提到,假設您定義了一個IWindow介面,這個介面只定義一些抽象的繪圖行為,而不涉及平臺的實作,今天您可以繼承這個類
來開發適用于X Window的XWindow類,也可以繼承這個類來開發適用于Windows
XP系統的WindowsXP類,為了善用系統資源,您在實作IWindow介面時,會將與系統相關的實現代碼撰寫在介面的實作中。<br>
<div style="text-align: center;"><img style="width: 208px; height: 275px;" alt="Bridge" title="Bridge" src="images/bridge-1.jpg"><br>
</div>
<br>
假設今天您繼承了IWindow介面撰寫了一個I3DWindow介面,當中擴充一個drawBox()方法用于3D圖形的繪制,簡單的說,
I3DWindow介面擴充了抽象行為,為了讓實現I3DWindow的類別也能在XWindow與Windows
XP兩個不同的系統中運行,您必須再度撰寫與系統相關的實現代碼。<br>
<div style="text-align: center;"><img style="width: 433px; height: 375px;" alt="Bridge" title="Bridge" src="images/bridge-2.jpg"></div>
<br>
簡單的說,抽象行為定義與平臺相關實現混雜在一起了,為了將抽象部份與它的實現部份分離,使它們都可以獨立地變化,您可以使用以下的結構。<br>
<div style="text-align: center;"><img style="width: 635px; height: 367px;" alt="Bridge" title="Bridge" src="images/bridge-3.jpg"></div>
<br>
在上圖的右邊中,與平臺相關的實現部份,被與右邊抽象行方面的發展分開了,左邊的抽象部份您可以一直發展下去,而不再因為綁定了平臺特定實作方法,而使得整個結構越來越失去彈性。<br>
<br>
Bridge模式的 UML 類別結構圖如下:<br>
<div style="text-align: center;"><img style="width: 473px; height: 224px;" alt="Bridge" title="Bridge" src="images/bridge-4.jpg"></div>
<br>
<br>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -