国产探花免费观看_亚洲丰满少妇自慰呻吟_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)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太原市| 绩溪县| 泰顺县| 津市市| 阿坝县| 大方县| 鸡东县| 扶余县| 高州市| 固阳县| 象州县| 庆城县| 乌兰浩特市| 眉山市| 西峡县| 来凤县| 新竹县| 本溪市| 云南省| 当涂县| 呼伦贝尔市| 荔波县| 贵南县| 枣庄市| 密云县| 论坛| 兖州市| 宜兴市| 吉安县| 堆龙德庆县| 东兰县| 本溪| 咸阳市| 毕节市| 武宁县| 昌乐县| 水城县| 白沙| 衡东县| 三江| 班戈县|