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

實(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 {//畫方 
  public void drawRectangle(String msg) { 
    System.out.println("draw Rectangle: " + msg); 
  } 
} 

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


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

2.對(duì)象適配器

類圖:

2016511114706104.jpg (672×498)

/** 
 * 對(duì)象適配器: 使用對(duì)象組合的方式,是動(dòng)態(tài)組合的方式。 
 * 既能畫方又能畫圓 
 * @author stone 
 * DrawAdapter是適配器,DrawRectangle屬于adapter,是被適配者,適配器將被適配者和適配目標(biāo)(DrawCircle)進(jìn)行適配 
 * 
 */ 
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.接口適配器
類圖

2016511114833646.jpg (414×508)

/* 
 * 接口適配器:接口中有抽象方法,我們只想實(shí)現(xiàn)其中的幾個(gè),不想全部實(shí)現(xiàn), 
 * 所以提供一個(gè)默認(rèn)空實(shí)現(xiàn),然后繼承自它,重寫實(shí)現(xiàn)我們想實(shí)現(xiàn)的方法 
 */ 
public interface IDraw { 
  void drawCircle(); 
  void drawRectangle(); 
} 

/* 
 * 接口適配器 的默認(rèn)實(shí)現(xiàn) 
 */ 
public class DefaultDrawAdapter implements IDraw {//畫方 畫圓 皆為空實(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)目開發(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過(guò)濾器中Filter的ChainFilter過(guò)濾鏈

    java過(guò)濾器中Filter的ChainFilter過(guò)濾鏈

    這篇文章主要介紹了java過(guò)濾器中Filter的ChainFilter過(guò)濾鏈,發(fā)送請(qǐng)求時(shí),如果有不符合的信息將會(huì)被filter進(jìn)行攔截,如果符合則會(huì)進(jìn)行放行。如果感興趣可以來(lái)學(xué)習(xí)一下
    2020-07-07
  • Java?17的一些新特性介紹

    Java?17的一些新特性介紹

    這篇文章主要介紹了Java?17的一些新特性介紹,Java添加了許多Java開發(fā)人員渴望的特性和改進(jìn),下文就來(lái)學(xué)習(xí)一下這些特性吧,需要的朋友可以參考一下
    2022-04-04
  • SpringBoot中Shiro緩存使用Redis、Ehcache的方法

    SpringBoot中Shiro緩存使用Redis、Ehcache的方法

    這篇文章主要介紹了SpringBoot中Shiro緩存使用Redis、Ehcache的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java編程文件遍歷之指定遍歷的層數(shù)詳細(xì)代碼

    Java編程文件遍歷之指定遍歷的層數(shù)詳細(xì)代碼

    這篇文章主要介紹了Java編程文件遍歷之指定遍歷的層數(shù)詳細(xì)代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • jvm垃圾回收之GC調(diào)優(yōu)工具分析詳解

    jvm垃圾回收之GC調(diào)優(yōu)工具分析詳解

    這篇文章主要為大家介紹了jvm垃圾回收之GC調(diào)優(yōu)工具的分析詳解,在進(jìn)行JVM?GC性能調(diào)優(yōu)之前,需要使用某些工具獲取到當(dāng)前應(yīng)用的狀態(tài)信息
    2022-01-01
  • Spring Boot2配置Swagger2生成API接口文檔詳情

    Spring Boot2配置Swagger2生成API接口文檔詳情

    這篇文章主要介紹了Spring Boot2配置Swagger2生成API接口文檔詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 混亂的Java日志體系及集成jar包梳理分析

    混亂的Java日志體系及集成jar包梳理分析

    這篇文章主要詳細(xì)的為大家梳理分析了剪不斷理還亂的Java日志體系,以及日志系統(tǒng)涉及到的繁雜的各種集成?jar?包,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • Mybatis generator的使用全面解析

    Mybatis generator的使用全面解析

    這篇文章主要介紹了Mybatis generator的使用,非常不錯(cuò),具有參考借鑒價(jià)值,對(duì)mybatis generator的使用相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-09-09
  • Java實(shí)現(xiàn)添加、驗(yàn)證PDF數(shù)字簽名的方法示例

    Java實(shí)現(xiàn)添加、驗(yàn)證PDF數(shù)字簽名的方法示例

    在設(shè)置文檔內(nèi)容保護(hù)的方法中,除了對(duì)文檔加密、添加水印外,應(yīng)用數(shù)字簽名也是一種有效防偽手段。本文就使用Java實(shí)現(xiàn)添加、驗(yàn)證PDF數(shù)字簽名,感興趣的可以了解一下
    2021-07-07
  • Java中FileOutputStream流的write方法

    Java中FileOutputStream流的write方法

    這篇文章主要為大家詳細(xì)介紹了Java中FileOutputStream流的write方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評(píng)論