基本介紹
配接器模式將某個類的介面轉換成客戶端期望的另一個介面表示,主要目的是兼容性,讓原本因介面不匹配不能一起作業的兩個類可以協同作業,
配接器模式屬于結構性模式,主要分為三類:類配接器模式、物件配接器模式、介面配接器模式,
類配接器模式
什么是類配接器模式
類配接器模式介紹:Adapter類,通過集成src類,實作dst類介面,完成src>dst的適配,
應用實體
案例
以生活中充電器的例子來講解配接器,充電器本身相當于Adapter,220V交流電相當于src(即被適配者),我們的dst(即目標)是5V直流電,
思路分析
代碼實作
1//被適配的類
2public class Voltage220V {
3 //輸出220V的電壓
4 public int output220V(){
5 int src=https://www.cnblogs.com/fairboyllil/p/220;
6 System.out.println("電源電壓="+src+"伏");
7 return src;
8 }
9}
1//適配介面
2public interface IVoltage5V {
3 int output5V();
4}
1public class VoltageAdapter extends Voltage220V implements IVoltage5V {
2 @Override
3 public int output5V() {
4 int srcV = output220V();//獲取220V的電壓
5 int dstV = srcV / 44;//進行處理
6 return dstV;
7 }
8}
1public class Phone {
2 //充電
3 public void charging(IVoltage5V iVoltage5V){
4 if (iVoltage5V.output5V()==5){
5 System.out.println("現在電壓為5V,可以充電");
6 }else if (iVoltage5V.output5V()>5){
7 System.out.println("現在電壓大于5V,可以充電");
8 }
9 }
10}
1public class Client {
2 public static void main(String[] args) {
3 Phone phone = new Phone();
4 phone.charging(new VoltageAdapter());
5 }
6}
類配接器模式注意事項和細節
Java是單繼承機制,所以類配接器需要繼承src類這一點算是一個缺點,因為這要求dst必須是介面,有一定局限性,
src類的方法在Adapter中都會暴露出來,也增加了使用的成本,
由于其繼承了src類,所以它可以根據需求重寫src類的方法,使得Adapter的靈活性增強了,
物件配接器模式
什么是物件配接器模式
基本思路和類的配接器模式相同,只是將Adapter類作修改,不是繼承src類,而是持有src類的實體,以解決兼容性的問題,即:持有src類,實作dst類介面,完成src>dst的適配,
根據“合成復用原則”,在系統中盡量使用關聯關系來替代繼承關系,
物件配接器模式是配接器模式常用的一種,
應用實體
案例
以生活中充電器的例子來講解配接器,充電器本身相當于Adapter,220V交流電相當于src(即被適配者),我們的dst(即目標)是5V直流電,使用物件配接器模式完成,
思路分析
代碼實作
1public class VoltageAdapter implements IVoltage5V {
2
3 private Voltage220V voltage220V;
4
5 //通過構造器傳入
6 public VoltageAdapter(Voltage220V voltage220V) {
7 this.voltage220V = voltage220V;
8 }
9
10 @Override
11 public int output5V() {
12 int dst = 0;
13 if (null != voltage220V) {
14 int src = voltage220V.output220();
15 dst = src / 44;
16 }
17 return dst;
18 }
19}
1public class Client {
2 public static void main(String[] args) {
3 Phone phone = new Phone();
4 phone.charging(new VoltageAdapter(new Voltage220V()));
5 }
6}
物件配接器注意事項和細節
物件配接器和類配接器其實算是同一種思想,只不過實作方式不同,根據合成復用原則,使用組合替代繼承,所以它解決了類配接器必須繼承src的局限性問題,也不再要求dst必須是介面,
使用成本更低更靈活,
介面配接器模式
什么是介面配接器模式
當不需要全部實作介面提供的方法時,可先設計一個抽象類實作介面,并為該介面中每個方法提供一個默認實作(空方法),那么該抽象類的子類可有選擇地覆寫父類的某些方法來實作需求,
適用于一個介面不想使用其所有的方法的情況,
應用實體
思路分析
代碼實作
1public interface Interface4 {
2 void m1();
3 void m2();
4 void m3();
5 void m4();
6}
1//在AbsAdapter中我們將Interface4的方法進行默認實作
2public abstract class AbsAdapter implements Interface4 {
3 @Override
4 public void m1() {
5 }
6
7 @Override
8 public void m2() {
9 }
10
11 @Override
12 public void m3() {
13 }
14
15 @Override
16 public void m4() {
17 }
18}
1public class Client {
2 public static void main(String[] args) {
3 AbsAdapter absAdapter= new AbsAdapter(){
4 @Override
5 public void m1() {
6 System.out.println("使用了m1的方法");
7 }
8 };
9 absAdapter.m1();
10 }
11}
配接器模式的注意事項和細節
三種命名方式是根據src是以怎樣的形式給到Adapter(在Adapter里的形式)來命名的,
- 類配接器:以類給到,在Adapter里,將src當做類,繼承,
- 物件配接器:以物件給到,在Adapter里,將src作為一個物件,持有,
- 介面配接器:以介面給到,在Adapter里,將src作為一個介面,實作,
Adapter模式最大的作用還是將原本不兼容的介面融合到一起作業,
實際開發中,實作起來不拘泥于我們講解的三種經典形式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/3110.html
標籤:設計模式
上一篇:設計模式(10) 外觀模式
下一篇:設計模式(11) 享元模式
