設計模式之介面卡模式

2021-07-23 10:46:59 字數 2084 閱讀 5816

1、簡介

《設計模式》一書中對adapter模式的描述是這樣的:

將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使原本由於介面不相容而不能一起工作的類可以一起工作。

2、例子

現在有這麼乙個場景,有三種形狀的類分別是點(point),線(line)矩形(rectangle),這三個類都有draw和display方法,但是相同的方法對應類的實現不同。客戶(client)物件可以呼叫具體類的具體方法。但為了程式的通用性以及後續的擴充套件(比如新增乙個同樣具有上述方法的circle類),這裡將三個類抽象成乙個介面shape。這樣客戶則可以以相同的方式處理所有物件而無需關注不同類之間的區別。客戶呼叫draw或者display方法,由具體類根據自身特點負責完成相應的行為。實現**如下

/**

* 標準介面

* */

public

inte***ce

shape

/**

* 實現標準介面,根據自身特點重寫介面方法

* */

public

class

point

implements

shape

@override

public

void

draw()

}

/**

* 實現標準介面,根據自身特點重寫介面方法

* */

public

class

line

implements

shape

@override

public

void

display()

}

/**

* 實現標準介面,根據自身特點重寫介面方法

* */

public

class

rectangle

implements

shape

@override

public

void

draw()

}

/**

* 客戶類,以相同的方式處理不同的物件,不必關注具體的實現方式

* */

public

class

client

}

執行結果如圖

/**

* 這是找到的類,這個類的介面與標準介面(shape)不匹配

* 在介面卡模式中稱為被適配者(adaptee)

* */

public

class

round

//可以實現標準介面中draw()功能,但介面不相容

public

void

paint()

}

/**

* 自己實現的實現標準介面的circle類,在介面卡模式中稱為adapter

* 該類持有round類的例項,呼叫該例項完成介面中的方法

* */

public

class

circle

implements

shape

//呼叫round物件提供的方法來完成相應的介面中的方法

@override

public

void

draw()

@override

public

void

display()

}

從這個例項中可以看出,介面卡模式常見的用途就是保持多型性。在介面卡模式中,adapter(例項中circle類)改變了adaptee(例項中round類)的介面,使得adaptee與adapter的基類target(例項中的shape介面)匹

設計模式之介面卡模式(類介面卡模式)

介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...

設計模式之 介面卡模式

1,介面卡模式把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法一起工作的兩個類能夠在一起工作 2,介面卡模式有兩種 1 類的介面卡模式 介面卡類繼承源類 這樣介面卡類就繼承了源類有的方法 並實現目標介面,實現在源類中沒有而在介面中有的方法,從而實現介面卡類有目標介面的所有方...

設計模式之介面卡模式

介面卡模式定義 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本介面不相容的類可以合作無間。簡單定義 封裝物件,並提供不同的介面。簡單例子 鴨子介面 package headfirst.adapter.ducks public inte ce duck 具體鴨子 package headfi...