日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 设计模式之适配器模式

發布時間:2024/9/30 java 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 设计模式之适配器模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、了解適配器模式

1.1 什么是適配器模式

適配器模式將一個類的接口,轉換成客戶期望的另一個接口。適配器讓原來接口不兼容的類可以合作無間。適配器模式有兩種:“對象”適配器和“類”適配器。

這個模式可以通過創建適配器進行接口轉換,讓不兼容的接口變得兼容。這可以讓客戶從實現的接口解耦。如果在一段時間之后,我們想要改變接口,適配器可以將改變的部分封裝起來,客戶就不必為了應對不同的接口而每次跟著修改。

1.2 適配器模式組成結構

  • 客戶 (Client):客戶類。
  • 目標接口(Target):客戶所期待的接口。目標可以是具體的或抽象的類,也可以是接口。
  • 適配者(Adaptee):需要適配的類或適配者類。
  • 適配器(Adapter):通過包裝一個需要適配的對象,把原接口轉換成目標接口。

1.3 適配器模式 UML 圖解

(1)“對象”適配器

這個適配器模式充滿著良好的 OO 設計原則:使用對象組合,以修改的接口包裝備被適配者;這樣做還有一個優點:那就是被適配者的任何子類,都可以搭配著適配器使用。

(2)“類”適配器

看起來“類”適配器和“對象”適配器很類似,唯一的差別就是 Adapter 繼承了 Target 與 Adaptee。所以“類”適配器必須要使用多重繼承才能實現,在 Java 中這是不可能的。所以這里我們主要介紹“對象”適配器。

1.4 適配器模式應用場景

  • 系統需要使用現有的類,而這些類的接口不符合系統的需要。
  • 想要建立一個可以重復使用的類,用于與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。
  • 需要一個統一的輸出接口,而輸入端的類型不可預知。

二、適配器模式具體應用

2.1 問題描述

以假亂真:如果它走起路來像一只鴨子,叫起來像一只鴨子。那么它可能是一只包裝了鴨子類適配器的火雞。

現在你有一個鴨子 (Duck) 接口,一個火雞 (Turkey) 接口。想讓你創建一個鴨子對象,但是現在你只有一只火雞,怎么辦呢?于是你想到用這只火雞來假扮鴨子。

2.2 代碼實現 (“對象”適配器模式)

目標鴨子 (Duck) 接口

package com.jas.adapter;/*** 鴨子接口中定義了抽象兩個方法,分別是,鴨子“呱呱叫”和鴨子會飛*/ public interface Duck {void quack();void fly(); }

火雞 (Turkey) 接口

package com.jas.adapter;/*** 火雞接口中定義了兩個抽象方法,分別是火雞“咯咯叫”和火雞會飛*/ public interface Turkey {void gobble();void fly(); }

野生火雞 (WildTurkey) 類

package com.jas.adapter;/*** 實現了 Turkey 接口中的兩個方法*/ public class WildTurkey implements Turkey {@Overridepublic void gobble() {System.out.println("Gobble gobble!");}@Overridepublic void fly() {System.out.println("I'm flying a short distance!");} }

適配器 TurkeyAdapter 類

package com.jas.adapter;/*** 適配器類,實現了 Duck 接口,目的將火雞轉換成鴨子,以假亂真*/ public class TurkeyAdapter implements Duck {Turkey turkey;/*** 通過構造方法,獲得適配對象實例化的引用* * @param turkey 適配者對象*/public TurkeyAdapter(Turkey turkey){this.turkey = turkey;}@Overridepublic void quack() {turkey.gobble();}@Overridepublic void fly() {// 由于火雞的飛行距離較鴨子近,為了偽裝成鴨子,所以讓它飛三次來對應鴨子的飛行距離for (int i = 0; i < 3; i++) {turkey.fly();}} }

測試 DuckTestDrive 類

package com.jas.adapter;public class DuckTestDrive {public static void main(String[] args) {WildTurkey wildTurkey = new WildTurkey();// 將火雞包裝進一個火雞適配器中,使它看起來像一只鴨子TurkeyAdapter turkeyAdapter = new TurkeyAdapter(wildTurkey); System.out.println("\nThe TurkeyAdapter says ...");turkeyAdapter.quack();turkeyAdapter.fly();} }/*** 輸出 * The TurkeyAdapter says ...* Gobble gobble!* I'm flying a short distance!* I'm flying a short distance!* I'm flying a short distance!* */

三、適配器模式總結

  • 適配器將一個對象包裝起來用以改變其接口。
  • 當需要使用一個現有的類而其接口并不符合你的需求時,可以使用適配器。
  • 實現一個適配器可能會花一番功夫,可能也會毫不費力,原因是有其目標接口的大小與復雜度決定。
  • 適配器模式有兩種形式:“類”適配器與“對象適配器”,類適配器需要使用到多重繼承,所以在 Java 中并不適用。

PS:點擊了解更多設計模式 http://blog.csdn.net/codejas/article/details/79236013

參考文獻

《Head First 設計模式》

總結

以上是生活随笔為你收集整理的Java 设计模式之适配器模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。