设计模式-Adapter模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式-Adapter模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 相關概念
- 對象適配器
- 類適配器
- 一個例子
- 總結
適配器模式(Adapter Pattern)是結構型模式。主要用來解決接口不兼容的問題,將一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。
相關概念
- 目標類(Target):定義客戶所需接口,可以是一個抽象類或接口,也可以是具體類
- 適配者(Adaptee):需要被適配的角色,它是已經存在的類或對象,適配者類一般是一個具體類,包含了客戶希望使用的業務方法,在某些情況下可能沒有適配者類的源代碼
- 適配器(Adapter):它的職責就是要把適配者轉換成目標角色,對Adaptee和Target進行適配,在對象適配器中,它通過繼承Target并關聯一個Adaptee對象使二者產生聯系
適配器模式分為兩種:對象適配器、類適配器。
對象適配器
可以看到對象適配器非常類似之前的==裝飾器模式==,都是通過組合/聚合來達到擴展的效果。
類適配器
類適配器通過繼承/實現來擴展,需要考慮帶來的耦合。
一個例子
我工作用的電腦是macbookpro,最近想外接一個顯示器,等拿到顯示器的時候才發現顯示器里面給的接線并不能用在mac的lightning接口上。
因此我需要一個轉接頭。
例子中Target是上圖中黃的type-c接口,Adaptee是上圖中紅色的lightning接口,整個轉接頭就是Adapter。
目標類
public interface TypeC {void useTypeCPort(); }適配者類
public class Lightning {public void extent() {System.out.println("通過lightning接口外接顯示器");} }對象適配器
public class PortObjectAdapter implements TypeC {private Lightning lightning;public PortObjectAdapter(Lightning lightning) {this.lightning = lightning;}@Overridepublic void useTypeCPort() {System.out.println("使用type-c轉接頭");lightning.extent();} }類適配器
public class PortClassAdapter extends Lightning implements TypeC {@Overridepublic void useTypeCPort() {System.out.println("使用type-c轉接頭");super.extent();} }使用
//對象適配器System.out.println("----對象適配器----");Lightning lightning = new Lightning();PortObjectAdapter adapter = new PortObjectAdapter(lightning);adapter.useTypeCPort();//類適配器System.out.println("----類適配器----");PortClassAdapter adapter1 = new PortClassAdapter();adapter1.useTypeCPort(); ----對象適配器---- 使用type-c轉接頭 通過lightning接口外接顯示器 ----類適配器---- 使用type-c轉接頭 通過lightning接口外接顯示器總結
- 適配器模式比較簡單,就是再不修改原來接口的情況下使其適應另一種接口需求。
- 實際情況中,往往目標類和適配者類是已經存在的,這樣就只需要額外引入一個適配器類即可。
- 通過引入一個適配器類來將目標類和適配者類解耦。
- 符合“開閉原則”,可以很方便的更換和新增適配器類。
過度的使用會讓系統變得很復雜,比如,明明看到調用的是 A 接口,其實內部被適配成了 B 接口的實現。
你可以在這里獲取相關代碼:設計模式-Adapter模式
轉載于:https://www.cnblogs.com/xuxiaojian/p/11493512.html
總結
以上是生活随笔為你收集整理的设计模式-Adapter模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于UDP协议的socket套接字编程
- 下一篇: 设计模式-Observer模式