适配器模式是一种结构型设计模式。适配器模式的思想是:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
设计场景:苹果机苹果线充电,安卓机安卓线充电,旅游住宿,没带安卓线,怎么用朋友的苹果线充电呢?
苹果线接口:
package adapter; public interface AppleLine { //苹果手机苹果线充电 public void chargeByAppleLine(); }
苹果线充电:
package adapter; public class AppleLineHome implements AppleLine{ @Override public void chargeByAppleLine() { System.out.println("苹果线充电"); } }
安卓线接口:
package adapter; public interface AndroidLine { //安卓手机安卓线充电 public void chargeByAndroidLine(); }
安卓线充电:
package adapter; public class AndroidLineHome implements AndroidLine{ @Override public void chargeByAndroidLine() { System.out.println("安卓线充电"); } }
适配器转换:
package adapter; public class Adapter implements AndroidLine { AppleLine appleLine; public Adapter(AppleLine appleLine) { this.appleLine = appleLine; } @Override public void chargeByAndroidLine() { appleLine.chargeByAppleLine(); } }
带手机旅游去了:
package adapter; public class RongYao { AndroidLine androidLine; public RongYao() { } public void androidCharg(AndroidLine androidLine) { this.androidLine = androidLine; } }
玩疯了,手机没电了:
package adapter; public class Main { public static void main(String[] args) { //完蛋,没有安卓线啊 RongYao rr = new RongYao(); AndroidLineHome twoPinSoketChina = new AndroidLineHome(); rr.androidCharg(twoPinSoketChina); //使用适配器,用苹果线给手机充电 AppleLineHome appleLineHome = new AppleLineHome(); Adapter adapter = new Adapter(appleLineHome); rr.androidCharg(adapter); } }
适配器模式的优缺点
优点:
更好的复用性:系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。
更好的扩展性:在实现适配器功能的时候,可以扩展自己源的行为(增加方法),从而自然地扩展系统的功能。
缺点:
会导致系统紊乱:滥用适配器,会让系统变得非常零乱。例如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。