我的漫漫程序之旅

          專注于JavaWeb開發
          隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
          數據加載中……

          Adapter設計模式的學習

          GOF《設計模式》一書對Adapter模式是這樣描述的:
            
           將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使原本由于接口不兼容而不能一起工作的類可以一起工作。

          圖解 :





              這段話大致是說:我們需要一種方式,為一個功能正確但接口不合的對象創建一個新接口。例如,客戶給我們如下需求:

          1) 為都有“顯示”(display)行為的點、線、正方形分別創建類。

          2) 客戶對象不必知道自己到底擁有點、線、還是正方形。它只需知道擁有這些形狀中的一個。

          也就是說,我們要用一個更高層次的概念將這些具體形狀都涵蓋進去,這個高層概念可以稱為:“可顯示的形狀”。因此,我們需要創建一個接口Shape:

          interface Shape{

              publicvoid display();

          }

          現在客戶忽然間有讓我們給這個系統增加一個畫圓的功能。這個看起來很簡單,只需定義一個Circle類來實現Shape接口,但是我們要給它編寫display方法,這可不是件簡單的事,假如此時我們正好發現一個XXCircle類,它有一個方法剛好可以完成這個功能,那么有沒有更好的方法來利用它呢,這時我們就要用到Adapter模式了。XXCircle代碼如下:

          class XXCircle{

              public void displayCircle(){

                 System.out.println("通過XXCircle.displayCircle()畫圓");

              }

          }

              Adapter模式有兩種類型:

          1)    對象Adapter模式,它依賴于一個對象(適配器)包含另一個對象(被適配的對象)

          class CircleObject implements Shape{

              public XXCircle circle;

              public CircleObject(XXCircle xxcircle){

              circle=xxcircle;

              }

              public void display() {

                 circle.displayCircle(); 

              }

          }

          public class Client {

              public static void main(String[] args) {

                 XXCircle circle=new XXCircle();

                 CircleObject co=new CircleObject(circle);

                 co.display();

              }

          }

          2)     類Adapter模式,它是通過多重繼承來實現的(java中沒有多繼承,是通過接口來實現的)。

          class CircleClass extends XXCircle implements Shape{

              public void display() {

                 super.displayCircle();  

              }

          }

          public class Client {

              public static void main(String[] args) {

                 CircleClass cc=new CircleClass();

                 cc.display();

              }

          }

              小結:Adapter模式是一個很常用的模式,它將一個(或多個)類的接口轉換成我們需要類所具備的一個接口。它的實現方式是:創建一個具備所需接口的類,然后包裝原有類的方法,這樣實際上就包含了被適配的對象。它主要適用于以下幾種情況:

          1) 你希望使用他人編寫的子程序或方法,因為你需要它所執行的功能。

          2) 你無法將這個子程序直接加入程序中。

          3) 子程序的接口或調用方式與需要使用它的相關對象不完全相同。



          posted on 2008-05-23 15:00 々上善若水々 閱讀(1541) 評論(1)  編輯  收藏 所屬分類: 設計模式

          評論

          # re: Adapter設計模式的學習  回復  更多評論   

          謝謝分享。
          2012-09-10 14:57 | 葉楚鑫
          主站蜘蛛池模板: 呼伦贝尔市| 新津县| 洮南市| 峨眉山市| 海晏县| 汝阳县| 平凉市| 松滋市| 荥经县| 靖州| 沈阳市| 汤原县| 梅州市| 那坡县| 延安市| 正宁县| 海晏县| 青河县| 卓尼县| 合作市| 漳平市| 新巴尔虎左旗| 六安市| 斗六市| 南川市| 翼城县| 留坝县| 宝应县| 九寨沟县| 明水县| 樟树市| 弥勒县| 宿松县| 修武县| 名山县| 吴忠市| 平安县| 卓尼县| 巍山| 河东区| 大城县|