2017-02-08 17 views
1

我一直在試圖讓我的頭在適配器模式,所有模式中,它是我想象最難使用的模式。是一個mapper適配器模式的版本

我想我明白什麼是實現,對我來說,它是將一個對象轉換爲另一個接口,以便客戶端可以使用它。

在我看到的例子中,它們是有意義的,但我覺得我可以用一個映射器實現相同的功能,該映射器接受一個對象並將其屬性(可能應用一些邏輯)映射到所需的對象類型,被用來代替。

是否有區別,或者它們是同一事物的不同名稱?

回答

2

認爲適配器不是新對象(如Mapper)的創建者,而是作爲接口翻譯器。

Mapper m = new Mapper() 
Dog dog = (Dog) m.mapRow(resultSet); // creating new object 

貓實例仍然存在這裏,一個新的「狗實例」未創建,而是建立在DogAdapter實例和「適應」貓對象狗接口。

Cat cat = new Cat("Felix"); 
Dog dog = new DogAdapter(cat); // cat still exists 
dog.bark(); // yields 'meow' 

這些顯然是人爲的例子,但希望他們會幫助你更好地理解。

+0

感謝它很好的例子,它非常有意義,你能否詳細解釋一下爲什麼你需要這樣做?而不只是選擇一個?是否允許貓的任何更新傳播給適應狗的物體?這是一個靜態屬性與動態更新的屬性的問題嗎? – berimbolo

+0

有時,將數據複製到支持目標接口(在這種情況下,Dog是目標接口)比僅僅轉換調用要昂貴得多。將遠程接口適配到另一個接口是屬性可能會根據後端數據更改的另一個示例,您不想複製這些屬性,因爲這會提供「快照」而不是「當前」值。 –