適配接口 java_【Java 設計模式】接口型模式--Adapter(適配器)模式

簡介:【Java設計模式】接口型模式–Adapter(適配器)模式Adapter模式的宗旨就是:向客戶提供接口,并使用現有的類所提供的服務,以滿足客戶的需求。?或者說,現在有classA的方法滿足客戶的部分要求,將另一部分需求抽象

【Java 設計模式】接口型模式–Adapter(適配器)模式Adapter模式的宗旨就是:向客戶提供接口,并使用現有的類所提供的服務,以滿足客戶的需求。

或者說,現在有class A的方法滿足客戶的部分要求,將另一部分需求抽象為interface B,那么就要有Adapter來使得class A和interface B相互結合,滿足客戶全部需求。通俗的理解:在party上,我想去搭訕一個女生Jerry。但是我的英語很爛,于是我拿了個翻譯器,翻譯器就是我和Jerry之間的Adapter,讓我和Jerry可以很好的交談。一,類適配器

862df7bc6a5da9e6d7a1b13613d6aa61.png示例代碼public interface RequiredInterface {/*** 這是客戶需要的方法*/public void requireMethod();}123456public class ExistingClass {/*** 這是現有的方法*/public void usefulMethod(){}}1234567適配器角色Adapter擴展了ExistingClass ,同時又實現了RequiredInterface 接口。由于ExistingClass 沒有提供requireMethod()方法,而RequiredInterface 又要求這個方法,因此適配器角色Adapter實現了這個方法。public class Adapter extends ExistingClass implements RequiredInterface {/*** 由于源類ExistingClass沒有方法requireMethod()* 因此適配器補充上這個方法*/@Overridepublic void requireMethod() {//寫相關的代碼}}12345678910二,對象適配器?

類適配器通過創建子類來實現適配,在設計類適配器的時候,新的適配器類可以實現期望的接口,并擴展已有的類。而對象適配器則是用委托的方式。

有兩種方式,一種是實現接口的方式,一種是繼承類的方式。

實現目標接口

e3778d669667467cbbdd561770f5fe51.png?

示例代碼public interface RequiredInterface {/*** 這是客戶需要的方法*/public void requireMethod();}123456public class ExistingClass {/*** 這是現有的方法*/public void usefulMethod(){}}1234567public class Adapter implements RequiredInterface{private ExistingClass exist;public Adapter(ExistingClass exist){this.exist = exist;}/*** 源類ExistingClass有方法usefulMethod* 因此適配器類直接委派即可*/public void usefulMethod(){this.exist.usefulMethod();}/*** 由于源類ExistingClass沒有方法requireMethod()* 因此適配器補充上這個方法*/@Overridepublic void requireMethod() {//寫相關的代碼}}12345678910111213141516171819202122繼承目標類

a7e741ed44f1f2d09a3628287440a71a.png?

示例代碼public class RequiredClass {/*** 這是客戶需要的方法*/public void requireMethod();}123456public class ExistingClass {/*** 這是現有的方法*/public void usefulMethod(){}}1234567public class Adapter extends RequiredClass {private ExistingClass exist;public Adapter(ExistingClass exist){this.exist = exist;}/*** 源類ExistingClass有方法usefulMethod* 因此適配器類直接委派即可*/public void usefulMethod(){this.exist.usefulMethod();}/*** 由于源類ExistingClass沒有方法requireMethod()* 因此適配器補充上這個方法*/public void requireMethod() {//寫相關的代碼}}123456789101112131415161718192021三,接口的適配器模式

接口的適配器是這樣的:有時我們寫的一個接口中有多個抽象方法,當我們寫該接口的實現類時,必須實現該接口的所有方法,這明顯有時比較浪費,因為并不是所有的方法都是我們需要的,有時只需要某一些,

此處為了解決這個問題,我們引入了接口的適配器模式,借助于一個抽象類,該抽象類實現了該接口,實現了所有的方法,而我們不和原始的接口打交道,只和該抽象類取得聯系,所以我們寫一個類,繼承該抽象類,重寫我們需要的方法就行。

02678276efa2d2c9473d5fde21474e58.png示例代碼public interface RequiredInterface{public void requireMethod1();public void requireMethod2();} 12345public abstract class AbstractRequiredClass implements RequiredInterface{public void requireMethod1(){}public void requireMethod2(){}} 12345public class Adapter1 extends AbstractRequiredClass {public void requireMethod1(){System.out.println("the RequiredInterface interface's first requireMethod1!");}} 12345public class Adapter2 extends AbstractRequiredClass {public void requireMethod2(){System.out.println("the RequiredInterface interface's first requireMethod2!");}} 12345個人覺得適配器模式中的這三種模式是挺靈活的,比如:復用性,系統需要使用現有的類,而此類的接口不符合系統的需要。那么通過適配器模式就可以讓這些功能得到更好的復用。還有擴展性在實現適配器功能的時候,可以調用自己開發的功能,從而自然地擴展系統的功能。?

不過在使用適配器時,也要注意到除非對系統的架構很清楚,否則過多的使用適配器,會讓系統非常零亂,不易整體進行把握。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542644.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542644.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542644.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

deepinu盤制作工具_u盤啟動盤制作工具怎么制作 u盤啟動盤制作工具制作方法【詳細步驟】...

在電腦城很多技術人員都會使用u盤裝系統的方法給用戶電腦安裝系統,他們是怎么操作的呢?其實很簡單,就是通過u盤啟動盤來安裝系統的。而u盤啟動盤是需要用 u盤啟動盤制作工具 來制作的。那么問題又來了,u盤啟動盤制作工具怎么制作呢?下面就給…

openstack私有云_OpenStack-下一代私有云的未來

openstack私有云The OpenStack project is an open source cloud computing platform for all types of clouds, which aims to be simple to implement, massively scalable, and feature rich. Developers and cloud computing technologists from around the world create t…

outlook2010客戶端無法預覽及保存word,excel問題

outlook2010客戶端遇到的EXCEL預覽及保存問題今天遇到了一個這樣的問題,outlook2010打開以后其他的excel都可以打開預覽及保存,這個excel無法預覽既保存,經查是outlook2010預覽及打開的緩存有限制,超過后就無法預覽了,…

python自動化框架pytest pdf_Python 自動化測試框架 unittest 和 pytest 對比

一、用例編寫規則1.unittest提供了test cases、test suites、test fixtures、test runner相關的類,讓測試更加明確、方便、可控。使用unittest編寫用例,必須遵守以下規則:(1)測試文件必須先import unittest(2)測試類必須繼承unittest.TestCase(3)測試方法必須以“test_”開頭(4…

freemarker的測試結果框架_java必背綜合知識點總結(框架篇)

框架篇一、Struts1的運行原理在啟動時通過前端總控制器ActionServlet加載struts-config.xml并進行解析,當用戶在jsp頁面發送請求被struts1的核心控制器ActionServlet接收,ActionServlet在用戶請求時將請求參數放到對應的ActionForm對象中的成員變量中&am…

Java SecurityManager checkPackageDefinition()方法與示例

SecurityManager類的checkPackageDefinition()方法 (SecurityManager Class checkPackageDefinition() method) checkPackageDefinition() method is available in java.lang package. checkPackageDefinition()方法在java.lang包中可用。 We call getProperty("package.d…

java容器詳解_詳解Java 容器(第①篇)——概覽

![](http://img.blog.itpub.net/blog/2020/04/02/9d89d3008962c127.png?x-oss-processstyle/bb)容器主要包括 Collection 和 Map 兩種,Collection 存儲著對象的集合,而 Map 存儲著鍵值對(兩個對象)的映射表。# 一、Collection![](https://upload-images…

python圖形界面庫哪個好_8個必備的Python GUI庫

Python GUI 庫有很多,下面給大家羅列常用的幾種 GUI庫。下面介紹的這些GUI框架,能滿足大部分開發人員的需要,你可以根據自己的需求,選擇合適的GUI庫。1. wxPython wxPython 是一個跨平臺的 GUI 工具集,是 Python 語言的…

為什么在Python中使用string.join(list)而不是list.join(string)?

join() is a string method and while using it the separator string iterates over an arbitrary sequence, forming string representations of each of the elements, inserting itself between the elements. join()是一個字符串方法,使用它時,分隔…

js的client、scroll、offset詳解與兼容性

clientWidth:可視區寬說明:樣式寬padding參考:js的client詳解 scrollTop : 滾動條滾動距離說明:chrome下他會以為滾動條是文檔元素的,所以需要做兼容:var scrollTop document.documentElement.scrollTop |…

88是python語言的整數類型_Python基礎數據類型題

Python基礎數據類型 題 考試時間:三個小時 滿分100分(80分以上包含80分及格) 1,簡述變量命名規范(3分)1.必須是字母,數字,下劃線的任意組合。 2.不能是數字開頭 3.不能是python中的關…

[轉載]使用awk進行數字計算,保留指定位小數

對于在Shell中進行數字的計算,其實方法有很多,但是常用的方法都有其弱點: 1、bc bc應該是最常用的Linux中計算器了,簡單方便,支持浮點。 [wangdongcentos715-node1 ~]$ echo 12 |bc 3 [wangdongcentos715-node1 ~]$ ec…

dcom配置_spring cloud 二代架構依賴組件 全配置放送

一 背景介紹先來看一下我們熟悉的第一代 spring cloud 的組件spring cloud 現在已經是一種標準了,各公司可以基于它的編程模型編寫自己的組件 ,比如Netflix、阿里巴巴都有自己的一套通過spring cloud 編程模型開發的分布式服務組件 。Spring Cloud 二代組…

olap 多維分析_OLAP(在線分析處理)| OLAP多維數據集和操作

olap 多維分析In the previous article of OLAP, we have seen various applications of OLAP, Various types of OLAP, advantages, and disadvantages of OLAP. In this article, we will learn about the, 在OLAP的上一篇文章中,我們了解了OLAP的各種應用&#x…

dede mysql語句_讓dede運行php代碼和mysql語句

一、dede運行php代碼舉例1:{dede:name runphpyes}$str "hello ";me $str;me . "world";{/dede:name}結果:hello world說明:"name"為任意定義的名字,me 表示當前的值,也就是要輸出最后…

每周一書-2016年8月28日到9月4日獲獎讀者公布

每周一書-2016年8月28日到9月4日獲獎讀者公布 上次送出的《Bootstrap基礎教程》,已經被幸運者收到了。我們先來回顧下《改善C程序代碼的125個建議》活動文章下的精彩留言。 這是一段高屋建瓴的評述,足見作者對C語言的了解和熱愛層度,當然也得…

c構造函數和析構函數_C ++構造函數和析構函數| 查找輸出程序| 套裝2

c構造函數和析構函數Program 1: 程序1&#xff1a; #include<iostream>using namespace std;class Sample{private:int X;int Y;public:Sample(int x, int y){X x;Y y;}void set(int x, int y){X x;Y y;}void print(){cout<<X<<" "<<Y&…

python map函數的作用_Python的map函數

map()是 Python 內置的高階函數&#xff0c;它接收一個函數 f 和一個 list&#xff0c;并通過把函數 f 依次作用在 list 的每個元素上&#xff0c;得到一個新的 list 并返回。 例如&#xff0c;對于list [1, 2, 3, 4, 5, 6, 7, 8, 9] 如果希望把list的每個元素都作平方&#xf…

idea java no sdk_java - intelliJ IDEA 13錯誤:請選擇Android SDK

java - intelliJ IDEA 13錯誤&#xff1a;請選擇Android SDK我已經在Error: Cannot find any configured Android SDK上安裝了intelliJ 12.1.2和Error: Cannot find any configured Android SDK。現在我使用intelliJ 13.0.1創建了一個空的android應用程序項目(也使用模擬器作為…

該怎樣在KeyShot中進行貼圖

2019獨角獸企業重金招聘Python工程師標準>>> 在渲染物體的時候&#xff0c;貼圖常常是不可缺少的部分&#xff0c;貼圖主要用于描述對象表面的物質形態&#xff0c;構造真實世界中自然物質表面的視覺表象。不同的貼圖能給人帶來不同的視覺感受&#xff0c;KeyShot3D…