欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java適配器模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年07月24日 11:07:09   作者:zy  
這篇文章主要介紹了Java適配器模式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

一.概念

適配器模式將一個(gè)接口轉(zhuǎn)換成客戶(hù)希望的另外一個(gè)接口。它使得原來(lái)由于接口不兼容而不能在一起工作的那些類(lèi)可以一起工作。

二.UML

 

三.更加生動(dòng)的例子

四.實(shí)例分析

去年買(mǎi)了一個(gè)本本,另外給本本配了羅技G1光電套??拥氖?,光電套的鼠標(biāo)是USB接口,鍵盤(pán)是PS2接口,可我的本本卻沒(méi)有PS2接口啊。于是跑到市場(chǎng),淘了一個(gè)轉(zhuǎn)接器。

于是乎,我抽象了這么幾個(gè)類(lèi)。

1.PS2Port(PS2接口)。

2.USBPort(USB接口)。

3.PS2ToUSB(對(duì)象適配器),將PS2接口裝換成USB接口。

4.TestAdapter(測(cè)試類(lèi)),客戶(hù)端。

PS2Port  

package com.bjpowernode.adapter; 
 
/** 
 * PS2接口,圓口 
 * @author eason 
 * 
 */ 
public interface PS2Port { 
  public void workWithPS2(); 
} 

 USBPort

package com.bjpowernode.adapter; 
 
/** 
 * USB接口,U口 
 * @author eason 
 * 
 */ 
public interface USBPort { 
  public void workWithUSB(); 
} 
 

PS2ToUSB

package com.bjpowernode.adapter; 
 
/** 
 * 對(duì)象適配器 
 * 將PS2接口裝換成USB接口 
 * 所以此類(lèi)類(lèi)型是USB接口(implements USBPort) + 成員變量ps2Port 
 * @author eason 
 * 
 */ 
public class PS2ToUSB implements USBPort{ 
 
  private PS2Port ps2Port; 
   
  public PS2ToUSB(PS2Port ps2Port) { 
    this.ps2Port = ps2Port; 
  } 
   
  @Override 
  public void workWithUSB() { 
    System.out.println("轉(zhuǎn)換的關(guān)鍵在這里,本來(lái)是"); 
    ps2Port.workWithPS2(); 
    System.out.println("經(jīng)過(guò)你的轉(zhuǎn)換,現(xiàn)在是USB工作中"); 
  } 
   
} 
 

TestAdapter

package com.bjpowernode.adapter; 
 
/** 
 * 測(cè)試類(lèi) 
 * client 
 * @author eason 
 * 
 */ 
public class TestAdapter { 
 
  public static void main(String[] args) { 
    //我現(xiàn)在有一個(gè)PS2接口 
    PS2Port ps2Port = new PS2Port() { 
      @Override 
      public void workWithPS2() { 
        System.out.println("PS2工作中"); 
      } 
    }; 
     
    //但是我需要的是一個(gè)USB接口啊,對(duì)我(client)來(lái)說(shuō),我只認(rèn)識(shí)USB接口 
    //經(jīng)過(guò)PS2ToUSB的轉(zhuǎn)換,PS2接口變成了USB接口 
    USBPort ps2ToUsbPort = new PS2ToUSB(ps2Port); 
     
    ps2ToUsbPort.workWithUSB(); 
     
  } 
 
} 

五.對(duì)象的適配器和類(lèi)的適配器

上述的適配器就是對(duì)象適配器。再看看類(lèi)適配器。

PS2ToUSB,只是簡(jiǎn)單模擬一下。因?yàn)閖ava不允許多繼承,所以java中沒(méi)有類(lèi)模式的代碼,只有思想。

package com.bjpowernode.adapter; 
 
/** 
 * 類(lèi)適配器 
 * @author eason 
 * 
 */ 
public class PS2ToUSB implements USBPort, PS2Port{ 
 
  //重寫(xiě)workWithUSB,把工作交給workWithPS2 
  @Override 
  public void workWithUSB() { 
    workWithPS2(); 
  } 
   
} 

差別就是:對(duì)象適配器實(shí)現(xiàn)了客戶(hù)端想要的接口(USB),在內(nèi)部有一個(gè)被適配對(duì)象(PS2)的引用,通過(guò)組合實(shí)現(xiàn)適配功能。類(lèi)適配器實(shí)現(xiàn)了客戶(hù)端想要的接口(USB)和被適配對(duì)象接口(PS2),通過(guò)繼承來(lái)實(shí)現(xiàn)適配功能。

六.使用場(chǎng)景及使用感受

1.希望復(fù)用一些現(xiàn)存的類(lèi),但是接口又與復(fù)用環(huán)境要求不一致。

2.其實(shí)適配器模式有點(diǎn)無(wú)奈之舉,在前期設(shè)計(jì)的時(shí)候,我們就不應(yīng)該考慮適配器模式,而應(yīng)該考慮通過(guò)重構(gòu)統(tǒng)一接口。

七.適配器模式與裝飾者模式

它們都可以用來(lái)包裝對(duì)象,本質(zhì)區(qū)別在于

1.適配器模式:將一個(gè)接口轉(zhuǎn)換成另外一個(gè)接口。

2.裝飾者模式:不改變接口,只加入職責(zé)。

相關(guān)文章

  • Spring AOP與代理類(lèi)的執(zhí)行順序級(jí)別淺析

    Spring AOP與代理類(lèi)的執(zhí)行順序級(jí)別淺析

    這篇文章主要介紹了Spring AOP與代理類(lèi)的執(zhí)行順序級(jí)別,關(guān)于 Spring AOP和Aspectj的關(guān)系,兩個(gè)都實(shí)現(xiàn)了切面編程,Spring AOP更多地是為了Spring框架本身服務(wù)的,而Aspectj具有更強(qiáng)大、更完善的切面功能
    2023-03-03
  • Elasticsearch?自動(dòng)重啟腳本創(chuàng)建實(shí)現(xiàn)

    Elasticsearch?自動(dòng)重啟腳本創(chuàng)建實(shí)現(xiàn)

    這篇文章主要為大家介紹了Elasticsearch?自動(dòng)重啟腳本創(chuàng)建實(shí)現(xiàn)詳解分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 在SpringBoot項(xiàng)目中實(shí)現(xiàn)給所有請(qǐng)求加固定前綴

    在SpringBoot項(xiàng)目中實(shí)現(xiàn)給所有請(qǐng)求加固定前綴

    這篇文章主要介紹了在SpringBoot項(xiàng)目中實(shí)現(xiàn)給所有請(qǐng)求加固定前綴,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java?精煉解讀數(shù)據(jù)結(jié)構(gòu)的順序表如何操作

    Java?精煉解讀數(shù)據(jù)結(jié)構(gòu)的順序表如何操作

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要?jiǎng)?chuàng)建這種元素組,用變量記錄它們,傳進(jìn)傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個(gè)數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲(chǔ)區(qū)里,元素間的順序關(guān)系由它們的存儲(chǔ)順序自然表示
    2022-03-03
  • SpringCloud HystrixDashboard服務(wù)監(jiān)控詳解

    SpringCloud HystrixDashboard服務(wù)監(jiān)控詳解

    Hystrix Dashboard 是Spring Cloud中查看Hystrix實(shí)例執(zhí)行情況的一種儀表盤(pán)組件,支持查看單個(gè)實(shí)例和查看集群實(shí)例,本文將對(duì)其服務(wù)監(jiān)控學(xué)習(xí)
    2022-11-11
  • 基于SpringBoot + Redis實(shí)現(xiàn)密碼暴力破解防護(hù)

    基于SpringBoot + Redis實(shí)現(xiàn)密碼暴力破解防護(hù)

    在現(xiàn)代應(yīng)用程序中,保護(hù)用戶(hù)密碼的安全性是至關(guān)重要的,密碼暴力破解是指通過(guò)嘗試多個(gè)密碼組合來(lái)非法獲取用戶(hù)賬戶(hù)的密碼,為了保護(hù)用戶(hù)密碼不被暴力破解,我們可以使用Spring Boot和Redis來(lái)實(shí)現(xiàn)一些防護(hù)措施,本文將介紹如何利用這些技術(shù)來(lái)防止密碼暴力破解攻擊
    2023-06-06
  • 一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用

    一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用

    Java 8 (又稱(chēng)為 jdk 1.8) 是 Java 語(yǔ)言開(kāi)發(fā)的一個(gè)主要版本。 Oracle 公司于 2014 年 3 月 18 日發(fā)布 Java 8 ,它支持函數(shù)式編程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等
    2021-10-10
  • 詳解Java設(shè)計(jì)模式之橋接模式

    詳解Java設(shè)計(jì)模式之橋接模式

    橋接,顧名思義,就是用來(lái)連接兩個(gè)部分,使得兩個(gè)部分可以互相通訊。橋接模式將系統(tǒng)的抽象部分與實(shí)現(xiàn)部分分離解耦,使他們可以獨(dú)立的變化。本文通過(guò)示例詳細(xì)介紹了橋接模式的原理與使用,需要的可以參考一下
    2022-06-06
  • Java8接口默認(rèn)靜態(tài)方法及重復(fù)注解原理解析

    Java8接口默認(rèn)靜態(tài)方法及重復(fù)注解原理解析

    這篇文章主要介紹了Java8接口默認(rèn)靜態(tài)方法及重復(fù)注解原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 詳解MyBatis特性之動(dòng)態(tài)SQL

    詳解MyBatis特性之動(dòng)態(tài)SQL

    動(dòng)態(tài) SQL 是 MyBatis 的強(qiáng)大特性之一,這篇文章我們將結(jié)合動(dòng)態(tài)SQL完成更加復(fù)雜的 SQL 操作,文章通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01

最新評(píng)論