最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

實(shí)例解析Java設(shè)計(jì)模式編程中的適配器模式使用

 更新時(shí)間:2017年04月19日 10:23:20   投稿:wbb  
本篇文章主要通過(guò)實(shí)例對(duì)適配器模式進(jìn)行了詳解,需要的朋友可以參考下

適配器模式的主要作用是在新接口和老接口之間進(jìn)行適配,通過(guò)將一個(gè)類(lèi)的接口轉(zhuǎn)換成客戶期望的另一個(gè)接口,讓原本不兼容的接口可以合作無(wú)間,本文以實(shí)例解析Java設(shè)計(jì)模式編程中的適配器模式使用,需要的朋友可以參考下

平時(shí)我們會(huì)經(jīng)常碰到這樣的情況,有了兩個(gè)現(xiàn)成的類(lèi),它們之間沒(méi)有什么聯(lián)系,但是我們現(xiàn)在既想用其中一個(gè)類(lèi)的方法,同時(shí)也想用另外一個(gè)類(lèi)的方法。有一個(gè)解決方法是,修改它們各自的接口,但是這是我們最不愿意看到的。這個(gè)時(shí)候Adapter模式就會(huì)派上用場(chǎng)了。

p style="margin: 0px; padding: 5px 0px;"> Adapter模式也叫適配器模式,是由GoF提出的23種設(shè)計(jì)模式的一種。Adapter模式是構(gòu)造型模式之一,通過(guò)Adapter模式,可以改變已有類(lèi)(或外部類(lèi))的接口形式。

適配器 模式 有三種方式,一種是對(duì)象適配器,一種是類(lèi)適配器, 一種是接口適配器

以下舉例說(shuō)明:

1.類(lèi)適配器

public class DrawRectangle {//畫(huà)方 
 public void drawRectangle(String msg) { 
  System.out.println("draw Rectangle: " + msg); 
 } 
} 
public interface IDrawCircle {//畫(huà)圓的接口 
 void drawCircle(); 
} 
/** 
 * 類(lèi)適配器 使用對(duì)象繼承的方式,是靜態(tài)的定義方式 
 * @author stone 
 * 
 */
public class DrawAdapter4Class extends DrawRectangle implements IDrawCircle {//既能畫(huà)方又能畫(huà)圓 
 @Override
 public void drawCircle() { 
  System.out.println("DrawAdapter4Class: drawCircle"); 
 }   
}

2.對(duì)象適配器

/** 
 * 對(duì)象適配器: 使用對(duì)象組合的方式,是動(dòng)態(tài)組合的方式。 
 * 既能畫(huà)方又能畫(huà)圓 
 * @author stone 
 * DrawAdapter是適配器,DrawRectangle屬于adapter,是被適配者,適配器將被適配者和適配目標(biāo)(DrawCircle)進(jìn)行適配 
 * 
 */
public class DrawAdapter4Object implements IDrawCircle {//既能畫(huà)方又能畫(huà)圓  
 private DrawRectangle drawRectangle; 
 public DrawAdapter4Object(DrawRectangle drawRectangle) { 
  this.drawRectangle = drawRectangle; 
 }  
 @Override
 public void drawCircle() { 
  System.out.println("DrawAdapter4Object: drawcircle"); 
 }   
 public void drawRectangle(String msg) { 
  drawRectangle.drawRectangle(msg); 
 }   
} 

3.接口適配器

/* 
 * 接口適配器:接口中有抽象方法,我們只想實(shí)現(xiàn)其中的幾個(gè),不想全部實(shí)現(xiàn), 
 * 所以提供一個(gè)默認(rèn)空實(shí)現(xiàn),然后繼承自它,重寫(xiě)實(shí)現(xiàn)我們想實(shí)現(xiàn)的方法 
 */
public interface IDraw { 
 void drawCircle(); 
 void drawRectangle(); 
} 
/* 
 * 接口適配器 的默認(rèn)實(shí)現(xiàn) 
 */
public class DefaultDrawAdapter implements IDraw {//畫(huà)方 畫(huà)圓 皆為空實(shí)現(xiàn) 
 @Override
 public void drawCircle() { 
 } 
 @Override
 public void drawRectangle() { 
public class Test { 
 public static void main(String[] args) { 
  //對(duì)象適配器 
  DrawAdapter4Object objAdapter = new DrawAdapter4Object(new DrawRectangle()); 
  objAdapter.drawCircle(); 
  objAdapter.drawRectangle(" in DrawAdapter4Object"); 
  System.out.println("--------------");    
  //類(lèi)適配器 
  DrawAdapter4Class clzAdapter = new DrawAdapter4Class(); 
  clzAdapter.drawCircle(); 
  clzAdapter.drawRectangle("in DrawAdapter4Class");  
  System.out.println("--------------"); 
  //接口適配器 
  MyDrawAdapter myDrawAdapter = new MyDrawAdapter(); 
  myDrawAdapter.drawCircle(); 
  myDrawAdapter.drawRectangle(); 
 } 
 static class MyDrawAdapter extends DefaultDrawAdapter { 
  @Override
  public void drawCircle() { 
   System.out.println("drawCircle in MyDrawAdapter"); 
  } 
   
 } 
}

打印

DrawAdapter4Object: drawcircle 
draw Rectangle: in DrawAdapter4Object 
-------------- 
DrawAdapter4Class: drawCircle 
draw Rectangle: in DrawAdapter4Class 
-------------- 
drawCircle in MyDrawAdapter 

適配器模式的三個(gè)特點(diǎn):

1 適配器對(duì)象實(shí)現(xiàn)原有接口

2 適配器對(duì)象組合一個(gè)實(shí)現(xiàn)新接口的對(duì)象(這個(gè)對(duì)象也可以不實(shí)現(xiàn)一個(gè)接口,只是一個(gè)單純的對(duì)象)

3 對(duì)適配器原有接口方法的調(diào)用被委托給新接口的實(shí)例的特定方法

有人認(rèn)為講解設(shè)計(jì)模式的例子都太簡(jiǎn)單,看著感覺(jué)是那么回事,但是要是真想在項(xiàng)目開(kāi)發(fā)中使用,還真是應(yīng)用不到。其實(shí)我們不必在項(xiàng)目中刻意使用設(shè)計(jì)模式,而是應(yīng)該從實(shí)際的設(shè)計(jì)問(wèn)題出發(fā),看哪個(gè)模式能解決我們的問(wèn)題,就使用哪個(gè)模式。不要為了使用模式而使用模式,那樣就舍本逐末了,一般情況下,只要遵循一定的設(shè)計(jì)原則就可以了,設(shè)計(jì)模式也是根據(jù)這些原則被總結(jié)出來(lái)的,熟悉了這些原則,模式自然而然就有了。

希望本篇文章對(duì)您有所幫助

相關(guān)文章

  • 詳解ThreadLocal為什么會(huì)內(nèi)存溢出原理

    詳解ThreadLocal為什么會(huì)內(nèi)存溢出原理

    這篇文章主要為大家介紹了ThreadLocal為什么會(huì)內(nèi)存溢出原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Spring中實(shí)現(xiàn)定時(shí)調(diào)度的幾種方法

    Spring中實(shí)現(xiàn)定時(shí)調(diào)度的幾種方法

    本篇文章主要介紹了Spring中實(shí)現(xiàn)定時(shí)調(diào)度示例,可以在無(wú)人值守的時(shí)候系統(tǒng)可以在某一時(shí)刻執(zhí)行某些特定的功能,有興趣的可以了解一下。
    2017-02-02
  • RestTemplate上傳、下載文件實(shí)例代碼

    RestTemplate上傳、下載文件實(shí)例代碼

    介紹了文件上傳和下載的基本方法,包括處理本地文件和文件流,上傳時(shí)區(qū)分了文件是否在本地,下載時(shí)強(qiáng)調(diào)返回值為byte[],并提供了工具類(lèi)進(jìn)行進(jìn)一步處理
    2025-02-02
  • Java 數(shù)據(jù)結(jié)構(gòu)之刪除鏈表中重復(fù)的結(jié)點(diǎn)

    Java 數(shù)據(jù)結(jié)構(gòu)之刪除鏈表中重復(fù)的結(jié)點(diǎn)

    在一個(gè)排序的鏈表中,會(huì)存在重復(fù)的結(jié)點(diǎn),如何實(shí)現(xiàn)刪除該鏈表中重復(fù)的結(jié)點(diǎn),重復(fù)的結(jié)點(diǎn)不保留,并返回鏈表頭指針呢?接下來(lái)小編將帶你詳細(xì)介紹
    2021-12-12
  • Java使用POI導(dǎo)出大數(shù)據(jù)量Excel的方法

    Java使用POI導(dǎo)出大數(shù)據(jù)量Excel的方法

    今天需要寫(xiě)一個(gè)導(dǎo)出的Excel的功能,但是發(fā)現(xiàn)當(dāng)數(shù)據(jù)量到3萬(wàn)條時(shí),列數(shù)在23列時(shí),內(nèi)存溢出,CPU使用100%,測(cè)試環(huán)境直接炸掉。小編給大家分享基于java使用POI導(dǎo)出大數(shù)據(jù)量Excel的方法,感興趣的朋友一起看看吧
    2019-11-11
  • SpringBoot+VUE實(shí)現(xiàn)數(shù)據(jù)表格的實(shí)戰(zhàn)

    SpringBoot+VUE實(shí)現(xiàn)數(shù)據(jù)表格的實(shí)戰(zhàn)

    本文將使用VUE+SpringBoot+MybatisPlus,以前后端分離的形式來(lái)實(shí)現(xiàn)數(shù)據(jù)表格在前端的渲染,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-08-08
  • Struts1教程之ActionMapping_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Struts1教程之ActionMapping_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Struts1教程之ActionMapping,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Spring Boot使用Druid連接池的示例代碼

    Spring Boot使用Druid連接池的示例代碼

    Druid是Java語(yǔ)言中最好的數(shù)據(jù)庫(kù)連接池。這篇文章主要介紹了Spring Boot使用Druid連接池的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Java?Springboot異步執(zhí)行事件監(jiān)聽(tīng)和處理實(shí)例

    Java?Springboot異步執(zhí)行事件監(jiān)聽(tīng)和處理實(shí)例

    Java?SpringBoot中,監(jiān)聽(tīng)和處理事件是一種常見(jiàn)的模式,它允許不同的組件之間通過(guò)事件進(jìn)行通信,事件監(jiān)聽(tīng)和處理通常通過(guò)Spring的事件發(fā)布-訂閱模型來(lái)實(shí)現(xiàn),一個(gè)簡(jiǎn)單的Spring?Boot應(yīng)用程序示例,其中將包括事件的定義、事件的發(fā)布以及事件的監(jiān)聽(tīng)
    2024-07-07
  • SpringBoot下使用自定義監(jiān)聽(tīng)事件的流程分析

    SpringBoot下使用自定義監(jiān)聽(tīng)事件的流程分析

    事件機(jī)制是Spring的一個(gè)功能,目前我們使用了SpringBoot框架,所以記錄下事件機(jī)制在SpringBoot框架下的使用,同時(shí)實(shí)現(xiàn)異步處理,這篇文章主要介紹了SpringBoot下使用自定義監(jiān)聽(tīng)事件,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

上虞市| 兴安盟| 紫云| 辽阳市| 华池县| 南靖县| 赫章县| 阜城县| 会同县| 慈利县| 屯门区| 根河市| 阿拉善右旗| 涞源县| 丽水市| 霍邱县| 德兴市| 靖远县| 德安县| 菏泽市| 龙南县| 郎溪县| 沧州市| 临洮县| 灵宝市| 安图县| 南投县| 鹤峰县| 开鲁县| 红原县| 黄梅县| 南阳市| 林西县| 青阳县| 罗定市| 溧水县| 海城市| 新竹市| 石柱| 新乡县| 黎川县|