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

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

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

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

Adapter模式也叫適配器模式,是由GoF提出的23種設(shè)計(jì)模式的一種。Adapter模式是構(gòu)造型模式之一,通過(guò)Adapter模式,可以改變已有類(或外部類)的接口形式。
適配器 模式 有三種方式,一種是對(duì)象適配器,一種是類適配器, 一種是接口適配器
以下舉例說(shuō)明:
1.類適配器

類圖

2016511114620936.jpg (718×458)

public class DrawRectangle {//畫(huà)方 
  public void drawRectangle(String msg) { 
    System.out.println("draw Rectangle: " + msg); 
  } 
} 

public interface IDrawCircle {//畫(huà)圓的接口 
  void drawCircle(); 
} 


/** 
 * 類適配器 使用對(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ì)象適配器

類圖:

2016511114706104.jpg (672×498)

/** 
 * 對(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.接口適配器
類圖

2016511114833646.jpg (414×508)

/* 
 * 接口適配器:接口中有抽象方法,我們只想實(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("--------------"); 
     
    //類適配器 
    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)的,熟悉了這些原則,模式自然而然就有了。

相關(guān)文章

  • JAVA中使用FTPClient實(shí)現(xiàn)文件上傳下載實(shí)例代碼

    JAVA中使用FTPClient實(shí)現(xiàn)文件上傳下載實(shí)例代碼

    本文給大家介紹如何利用jakarta commons中的FTPClient(在commons-net包中)實(shí)現(xiàn)上傳下載文件。非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-06-06
  • SpringCloud Alibaba 基本開(kāi)發(fā)框架搭建過(guò)程

    SpringCloud Alibaba 基本開(kāi)發(fā)框架搭建過(guò)程

    這篇文章主要介紹了SpringCloud Alibaba 基本開(kāi)發(fā)框架搭建過(guò)程,開(kāi)發(fā)工具選用的idea,本文通過(guò)圖文實(shí)例相結(jié)合給大家分享搭建全過(guò)程,需要的朋友可以參考下
    2021-06-06
  • Springboot集成GraphicsMagick

    Springboot集成GraphicsMagick

    本文主要是教大家如何將GraphicsMagick命令行工具集成到Springboot項(xiàng)目中,便可以使用Java進(jìn)行圖片處理相關(guān)開(kāi)發(fā)。
    2021-05-05
  • 使用mybatis報(bào)Invalid bound statement解決分析

    使用mybatis報(bào)Invalid bound statement解決分析

    這篇文章主要為大家介紹了使用mybatis報(bào)Invalid bound statement原因解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 基礎(chǔ)不牢,地動(dòng)山搖,Java基礎(chǔ)速來(lái)刷刷

    基礎(chǔ)不牢,地動(dòng)山搖,Java基礎(chǔ)速來(lái)刷刷

    基礎(chǔ)不牢,地動(dòng)山搖,快來(lái)一起學(xué)習(xí)一下基礎(chǔ)吧,不斷地學(xué)習(xí)就算是基礎(chǔ)也會(huì)有新的認(rèn)知和收獲,加油
    2021-08-08
  • 關(guān)于Idea清除緩存并重啟解決的問(wèn)題

    關(guān)于Idea清除緩存并重啟解決的問(wèn)題

    這篇文章主要介紹了關(guān)于Idea清除緩存并重啟解決的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • Java用自帶的Image IO給圖片添加水印

    Java用自帶的Image IO給圖片添加水印

    本文主要介紹了如何采用Java自帶的Image IO實(shí)現(xiàn)圖片添加水印的需求,并整合了一些其他功能,感興趣的朋友可以參考下
    2021-06-06
  • 基于Spring的注解@Qualifier小結(jié)

    基于Spring的注解@Qualifier小結(jié)

    這篇文章主要介紹了Spring的注解@Qualifier小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • mybatis使用雙層<foreach>循環(huán)嵌套方式

    mybatis使用雙層<foreach>循環(huán)嵌套方式

    在Mybatis中使用雙層循環(huán)嵌套插入數(shù)據(jù)可以有效減少數(shù)據(jù)庫(kù)IO操作,提高性能,通過(guò)在mapper.xml中定義雙層集合來(lái)實(shí)現(xiàn),外層集合為實(shí)體類中的集合字段,內(nèi)層集合為集合字段中的另一個(gè)集合,通過(guò)這種方式,可以在業(yè)務(wù)代碼中減少循環(huán)插入的次數(shù)
    2024-09-09
  • springboot單元測(cè)試依賴踩坑記錄

    springboot單元測(cè)試依賴踩坑記錄

    這篇文章主要介紹了springboot單元測(cè)試依賴踩坑記錄及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評(píng)論

东方市| 左贡县| 佛教| 都江堰市| 华蓥市| 广州市| 辛集市| 南溪县| 大兴区| 邹平县| 耿马| 德保县| 平罗县| 嵊州市| 古蔺县| 临沧市| 宽城| 宜阳县| 甘洛县| 理塘县| 南溪县| 临泽县| 滁州市| 长兴县| 和龙市| 阜阳市| 德惠市| 响水县| 镇赉县| 文水县| 搜索| 玛曲县| 茶陵县| 巧家县| 元谋县| 上高县| 蛟河市| 同心县| 绵竹市| 黎城县| 桃源县|