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

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

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

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

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

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

適配器 模式 有三種方式,一種是對象適配器,一種是類適配器, 一種是接口適配器

以下舉例說明:

1.類適配器

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

2.對象適配器

/** 
 * 對象適配器: 使用對象組合的方式,是動態(tài)組合的方式。 
 * 既能畫方又能畫圓 
 * @author stone 
 * DrawAdapter是適配器,DrawRectangle屬于adapter,是被適配者,適配器將被適配者和適配目標(DrawCircle)進行適配 
 * 
 */
public class DrawAdapter4Object implements IDrawCircle {//既能畫方又能畫圓  
 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.接口適配器

/* 
 * 接口適配器:接口中有抽象方法,我們只想實現(xiàn)其中的幾個,不想全部實現(xiàn), 
 * 所以提供一個默認空實現(xiàn),然后繼承自它,重寫實現(xiàn)我們想實現(xiàn)的方法 
 */
public interface IDraw { 
 void drawCircle(); 
 void drawRectangle(); 
} 
/* 
 * 接口適配器 的默認實現(xiàn) 
 */
public class DefaultDrawAdapter implements IDraw {//畫方 畫圓 皆為空實現(xiàn) 
 @Override
 public void drawCircle() { 
 } 
 @Override
 public void drawRectangle() { 
public class Test { 
 public static void main(String[] args) { 
  //對象適配器 
  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 

適配器模式的三個特點:

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

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

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

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

希望本篇文章對您有所幫助

相關(guān)文章

  • 關(guān)于IDEA關(guān)聯(lián)數(shù)據(jù)庫的問題

    關(guān)于IDEA關(guān)聯(lián)數(shù)據(jù)庫的問題

    這篇文章主要介紹了IDEA關(guān)聯(lián)數(shù)據(jù)庫的相關(guān)知識,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Java壓縮文件為ZIP并加密的詳細步驟

    Java壓縮文件為ZIP并加密的詳細步驟

    Zip是一種常用的文件壓縮格式,下面這篇文章主要給大家介紹了關(guān)于Java壓縮文件為ZIP并加密的詳細步驟,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • IDEA操作MongoDB及安全認證方式

    IDEA操作MongoDB及安全認證方式

    這篇文章主要介紹了IDEA操作MongoDB及安全認證方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • idea快速搭建spring cloud注冊中心與注冊的方法

    idea快速搭建spring cloud注冊中心與注冊的方法

    這篇文章主要介紹了idea快速搭建spring cloud注冊中心與注冊的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Java httpcomponents發(fā)送get post請求代碼實例

    Java httpcomponents發(fā)送get post請求代碼實例

    這篇文章主要介紹了Java httpcomponents發(fā)送get post請求代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • SSH框架網(wǎng)上商城項目第7戰(zhàn)之整合Struts2和Json

    SSH框架網(wǎng)上商城項目第7戰(zhàn)之整合Struts2和Json

    SSH框架網(wǎng)上商城項目第7戰(zhàn)之整合Struts2和Json,打通EasyUI和Struts2之間的交互,感興趣的小伙伴們可以參考一下
    2016-05-05
  • SpringBoot中實現(xiàn)Redis緩存預(yù)熱

    SpringBoot中實現(xiàn)Redis緩存預(yù)熱

    緩存預(yù)熱是一種在系統(tǒng)啟動后,但在實際使用前將數(shù)據(jù)加載到緩存中的技術(shù),本文主要來和大家一起探討如何在Spring Boot應(yīng)用程序中實現(xiàn)Redis緩存預(yù)熱,以確保系統(tǒng)在處理請求前就已經(jīng)處于最佳狀態(tài),感興趣的可以了解下
    2023-11-11
  • 8個Spring事務(wù)失效場景詳解

    8個Spring事務(wù)失效場景詳解

    相信大家對Spring種事務(wù)的使用并不陌生,但是你可能只是停留在基礎(chǔ)的使用層面上。今天,我們就簡單來說下Spring事務(wù)的原理,然后總結(jié)一下spring事務(wù)失敗的場景,并提出對應(yīng)的解決方案,需要的可以參考一下
    2022-12-12
  • Java編程時間日期API實例解析

    Java編程時間日期API實例解析

    本文主要介紹了Java編程時間日期API實例解析的相關(guān)內(nèi)容,分享了一則實例,具有一定借鑒價值,需要的朋友可以參考下。
    2018-01-01
  • Java中EasyPoi導(dǎo)出復(fù)雜合并單元格的方法

    Java中EasyPoi導(dǎo)出復(fù)雜合并單元格的方法

    這篇文章主要介紹了Java中EasyPoi導(dǎo)出復(fù)雜合并單元格的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01

最新評論