国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java設計模式概述之結構型模式(適配器模式)

2019-11-11 06:05:28
字體:
來源:轉載
供稿:網友

結構型模式清單:適配器模式、橋接模式、組合模式、裝飾模式、外觀模式、享元模式、代理模式。

其中,適配器模式、裝飾模式、享元模式、代理模式適用場景較多,須重點掌握。

一、適配器模式


適配器模式分為類適配器模式對象適配器模式缺省適配器模式

適配器模式思想原理很簡單。舉個簡單的例子:筆記本電腦充電。筆記本電腦充電的過程涉及三個元件:筆記本、電源適配器、插座。大家可以思考為什么有電源適配器。

首先,插座并不知曉筆記本充電時的額定功率的,因此,需要一個電源適配器,來達到筆記本充電時的額定功率。電源適配器是智能的,一方是220V插座電流流入,另一方是筆記本額定電流輸出至筆記本。因此,適配器擔任了一個重要的中介人角色。

1、類適配器模式

首先來看一下流程圖。

這里寫圖片描述

Interface是接口,接口中定義了兩個方法:run1、run2。Adapter是適配器類,Adaptee是被適配的類。

現在提出一個需求:Adaptee類只需要run2這一方法。

因此,Adapter就要協助Adaptee屏蔽掉run1這一方法。

有人會納悶為什么要叫做“屏蔽”。事實上,直接繼承接口,必須實現所有的方法。你不需要run1方法,你就要想辦法屏蔽。

如何屏蔽run1方法?

上代碼:

class Adapter{ public void run1(){ System.out.首先在Adapter中定義run1方法。class Adaptee extends Adapter implements C這句很關鍵。Adapter實現Interface接口,Adaptee繼承Adapter類,又因為Adapter已經實現了run1方法,留給Adaptee實現的方法就只有run2了。這樣,就達到了我們想要的目的:Adaptee類實現run2方法,不實現run1方法。

2、對象適配器模式

我們先來回顧一下類適配器模式是怎樣寫的: class Adaptee extends Adapter implements C Adapter是以的形式來適配的。

試想一下某些場景,如果擺在你面前是許多許多個適配器,你覺得用類適配器模式方便嗎?

不方便。

對象適配器對比類適配器最大優勢就是動態裝載適配器。也就是說你想用哪個適配器都可以通過適配器的實例對象來使用。

上代碼:

interface Interface{ public void run1(); public void run2();}class Adapter{ public void run1(){ System.out.println("run1方法"); }}class Adaptee implements Interface{ private Adapter adapter; public Adaptee(Adapter adapter){ this.adapter = adapter; } public void run1() { this.adapter.run1(); } public void run2() { System.out.println("Adaptee實現run2方法"); }}

很顯然,我們可以通過Adaptee的構造函數將Adapter的實例對象注入Adaptee中,利用Adapter的run1方法來適配Interface接口中的run1方法。

3、缺省適配器模式

Earpods不兼容Andriod系統,嗯,Earpods壓根就沒對Andriod機提供適配功能。

因此,市場上出現了很多iOS、Andriod通用的耳機,都能與之適配。

缺省適配器屬于類適配器的一種。是類適配器的特殊形式。缺省適配器實現接口中的所有方法,每一個方法都是空的,嗯,like this…”public void balabla(){}“。因此,被適配的對象只需繼承缺省適配器就能使用或重寫自己想要的方法。

上代碼!

class iphone extends Earphone{ public void iOS(){ System.out.println("iPhone"); }}class Galaxy extends Earphone{ public void Andriod(){ System.out.println("Galaxy"); }}class Earphone implements Interface{ public void iOS() { } public void Andriod() { }}interface Interface{ void iOS(); void Andriod();}

Tips:Earphone(Adapter)、iPhone(Adaptee)、Galaxy(Adaptee)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 秭归县| 青川县| 藁城市| 昭通市| 巨鹿县| 平南县| 汽车| 渭源县| 平邑县| 长武县| 辽宁省| 盖州市| 娱乐| 同心县| 裕民县| 祁连县| 石棉县| 池州市| 吉木萨尔县| 黔西县| 金溪县| 门头沟区| 吴堡县| 新巴尔虎左旗| 应用必备| 龙南县| 安岳县| 德江县| 汝州市| 盐亭县| 临汾市| 井陉县| 平遥县| 肇源县| 崇左市| 建湖县| 平乐县| 两当县| 类乌齐县| 红桥区| 华亭县|