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

              這段話大致是說:我們需要一種方式,為一個(gè)功能正確但接口不合的對(duì)象創(chuàng)建一個(gè)新接口。例如,客戶給我們?nèi)缦滦枨螅?/span>

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

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

          也就是說,我們要用一個(gè)更高層次的概念將這些具體形狀都涵蓋進(jìn)去,這個(gè)高層概念可以稱為:“可顯示的形狀”。因此,我們需要?jiǎng)?chuàng)建一個(gè)接口Shape:

          interface Shape{

              publicvoid display();

          }

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

          class XXCircle{

              public void displayCircle(){

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

              }

          }

              Adapter模式有兩種類型:

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

          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模式,它是通過多重繼承來實(shí)現(xiàn)的(java中沒有多繼承,是通過接口來實(shí)現(xiàn)的)。

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

              }

          }

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

          1) 你希望使用他人編寫的子程序或方法,因?yàn)槟阈枰鶊?zhí)行的功能。

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

          3) 子程序的接口或調(diào)用方式與需要使用它的相關(guān)對(duì)象不完全相同。

          posts - 146, comments - 143, trackbacks - 0, articles - 0

          Copyright © flustar

          主站蜘蛛池模板: 井陉县| 赤壁市| 衡南县| 奉化市| 繁峙县| 奉新县| 沾益县| 金阳县| 寻甸| 鄂温| 哈巴河县| 达孜县| 商洛市| 大姚县| 巩义市| 玉龙| 常德市| 霍山县| 三原县| 衡南县| 台北市| 绍兴市| 澄江县| 天津市| 城市| 三门县| 弥勒县| 河西区| 东台市| 武宁县| 南昌县| 农安县| 浙江省| 丹阳市| 桐柏县| 沁阳市| 锡林浩特市| 长丰县| 宝清县| 洛川县| 大英县|