设计一个网站需要什么,360免费建站不要钱,用html做一个网页,网软志成企业网站管理系统至诚之道#xff0c;可以前知 一#xff0c;定义
适配器模式把一个类的接口变换成客户端所期待的另一种接口#xff0c;从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
适配器模式在我们的开发中使用率极高#xff0c;ListView#xff0c;GridView可以前知 一定义
适配器模式把一个类的接口变换成客户端所期待的另一种接口从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
适配器模式在我们的开发中使用率极高ListViewGridViewRecyclerView等都使用了适配器模式它其实就是将两个不兼容 的类融合在一起它有点像粘合剂将不同的东西通过一种转换使得他们能够协作起来。 二使用场景
1系统需要使用现有的类而此类的接口不符合系统的需要即接口不兼容
2想要建立一个可以重复使用的类用于与一些彼此之间没有太大关联的一些类包括一些可能在将来引进的类一起工作
3需要一个统一的输出接口而输入端的类型不可预知 三角色介绍
1Target: 目标角色也就是所期待得到的接口。注意在类适配器模式中目标不可以是类
2Adaptee:现在需要适配的接口
3Adapter:适配器角色也是本模式的核心。适配器把源接口转换成目标接口。显然这一角色不可以是接口而必须是具体类 四类适配器模式的使用
玩过和平精英吃鸡手游的玩家都知道大家都是在手机或者平板电脑上面用手搓者玩的这更适合那些没玩过射击游戏的新手玩家但是对于大多数端游老玩家来说手搓很不习惯于是王座就诞生了它可以让玩家通过键鼠模拟手搓在手机或者平板上操作游戏这里我们就可以把王座看作是适配器角色目标角色就是键鼠操作游戏Adaptee角色就是手搓操作游戏。
创建一个目标角色接口使用键鼠玩游戏
public interface KeyMouse {void playGameByKM();
}
创建一个适配器角色王座可以通过王座玩游戏
public class Adapter extends Hand implements KeyMouse{Overridepublic void playGameByKM() {System.out.println(使用键鼠输入操作信号);System.out.println(使用王座将键鼠操作信号转换成模拟手指操作信号);playGameByHand();}
}
创建一个被适配的角色手搓玩游戏
public class Hand {public void playGameByHand(){System.out.println(通过手搓玩游戏);}
}
使用
Adapter adapter new Adapter();
adapter.playGameByKM();
输出 这样就可以通过王座玩吃鸡了。
五对象适配器模式的使用
与类适配器模式一样对象的适配器模式把被适配的类的API转换成为目标类的API与类的适配器模式不同的是对象的适配器模式不是使用继承关系连接到Adapter类而是使用代理关系连接到Adapter类。
还是上面那个吃鸡的例子。
首先还是创建我们的目标接口来使用键鼠玩游戏
public interface KeyMouse {void playGameByKM();
}
然后创建一个被适配的角色手搓玩游戏
public class Hand {public void playGameByHand(){System.out.println(通过手搓玩游戏);}
}
最后创建我们的适配器adapter王座
public class KingAdapter implements KeyMouse{private Hand hand;public KingAdapter(Hand hand) {this.hand hand;}Overridepublic void playGameByKM() {System.out.println(使用键鼠输入操作信号);System.out.println(使用王座将键鼠操作信号转换成模拟手指操作信号);hand.playGameByHand();}
}
最后在使用时
KingAdapter adapter new KingAdapter(new Hand());
adapter.playGameByKM();
输出 该方式直接将要被适配的对象传递到Adapter中使用组合的形式实现接口兼容的效果比类适配器更为灵活它的另一个好处是被适配对象中的方法不会暴露出来而类适配器由于继承了被适配对象因此被适配对象类的函数在Adapter类中也都含有这使得Adapter类出现一些奇怪的接口用户使用成本较高因此对象适配器模式更加灵活实用。
六总结
在实际开发中特别是在自定义view等情况下适配器模式的应用非常广泛且具有重大意义。
优点
1更好的复用性系统需要使用现有的类而次类的接口不符合系统的需要那么通过适配器模式就可以让这些功能得到更好的复用。
2更好的扩展性在实现适配器功能的时候可以调用自己开发的功能从而自然的扩展系统的功能。
缺点过多的使用适配器会让系统非常凌乱不易整体把握。例如明明看到调用的是A接口其实内部被适配成了B接口的实现一个系统如果太多出现这种情况无异于一场灾难。因此如果不是很有必要可以不适用适配器而是直接对系统进行重构。