實(shí)例解析Java設(shè)計(jì)模式編程中的適配器模式使用
適配器模式的主要作用是在新接口和老接口之間進(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)了。
p style="margin: 0px; padding: 5px 0px;"> Adapter模式也叫適配器模式,是由GoF提出的23種設(shè)計(jì)模式的一種。Adapter模式是構(gòu)造型模式之一,通過(guò)Adapter模式,可以改變已有類(或外部類)的接口形式。
適配器 模式 有三種方式,一種是對(duì)象適配器,一種是類適配器, 一種是接口適配器
以下舉例說(shuō)明:
1.類適配器

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ì)象適配器
/**
* 對(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.接口適配器
/*
* 接口適配器:接口中有抽象方法,我們只想實(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)的,熟悉了這些原則,模式自然而然就有了。
希望本篇文章對(duì)您有所幫助
- 深入理解Java設(shè)計(jì)模式之適配器模式
- Java設(shè)計(jì)模式--適配器模式詳解
- java設(shè)計(jì)模式筆記之適配器模式
- java中設(shè)計(jì)模式之適配器模式
- java 設(shè)計(jì)模式之適配器模式的詳解
- java設(shè)計(jì)模式之適配器模式(Adapter)
- 初識(shí)Java設(shè)計(jì)模式適配器模式
- java設(shè)計(jì)模式之適配器模式
- 實(shí)例解析Java設(shè)計(jì)模式編程中的適配器模式使用
- Java設(shè)計(jì)模式之適配器模式(Adapter模式)介紹
- Java 設(shè)計(jì)模式之適配器模式詳解
相關(guān)文章
關(guān)于IDEA關(guān)聯(lián)數(shù)據(jù)庫(kù)的問(wèn)題
這篇文章主要介紹了IDEA關(guān)聯(lián)數(shù)據(jù)庫(kù)的相關(guān)知識(shí),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
idea快速搭建spring cloud注冊(cè)中心與注冊(cè)的方法
這篇文章主要介紹了idea快速搭建spring cloud注冊(cè)中心與注冊(cè)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
Java httpcomponents發(fā)送get post請(qǐng)求代碼實(shí)例
這篇文章主要介紹了Java httpcomponents發(fā)送get post請(qǐng)求代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
SSH框架網(wǎng)上商城項(xiàng)目第7戰(zhàn)之整合Struts2和Json
SSH框架網(wǎng)上商城項(xiàng)目第7戰(zhàn)之整合Struts2和Json,打通EasyUI和Struts2之間的交互,感興趣的小伙伴們可以參考一下2016-05-05
SpringBoot中實(shí)現(xiàn)Redis緩存預(yù)熱
緩存預(yù)熱是一種在系統(tǒng)啟動(dòng)后,但在實(shí)際使用前將數(shù)據(jù)加載到緩存中的技術(shù),本文主要來(lái)和大家一起探討如何在Spring Boot應(yīng)用程序中實(shí)現(xiàn)Redis緩存預(yù)熱,以確保系統(tǒng)在處理請(qǐng)求前就已經(jīng)處于最佳狀態(tài),感興趣的可以了解下2023-11-11
8個(gè)Spring事務(wù)失效場(chǎng)景詳解
相信大家對(duì)Spring種事務(wù)的使用并不陌生,但是你可能只是停留在基礎(chǔ)的使用層面上。今天,我們就簡(jiǎn)單來(lái)說(shuō)下Spring事務(wù)的原理,然后總結(jié)一下spring事務(wù)失敗的場(chǎng)景,并提出對(duì)應(yīng)的解決方案,需要的可以參考一下2022-12-12
Java中EasyPoi導(dǎo)出復(fù)雜合并單元格的方法
這篇文章主要介紹了Java中EasyPoi導(dǎo)出復(fù)雜合并單元格的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

