java设计模式之适配器模式

来源:互联网 发布:天刀成女捏脸数据 编辑:程序博客网 时间:2024/05/21 06:22

适配器官方的说法就是将一个类的接口转化成客户端期望的另一个接口,适配器让原本接口不兼容的类可以合作无间。

非官方说法就是:比如说小明有个手机,他的音乐槽是大孔的,可是他买了个耳机由于自己的疏忽买了个小孔的耳机,这时发现这个小孔耳机插不到大孔音乐槽的手机上,可以这耳机扔了又可惜,于是就干脆去买了个耳机的适配器,其凹进去的一方是小孔的正好可以插买回来的小孔耳机,凸出来的一方是大孔的正好可以插进手机的大孔音乐槽中。这时借助于这个买回来的适配器我们就可以继续用这个买回来的小孔耳机了。接下来我们看一下实现:

 

package com.djk.design.adapter;public class AdapterTest{public static void main(String[] args) {BigHole bigHole = new Adapter(new SmallHoleHeadSet());Phone phone = new Phone(bigHole);phone.play();}}interface BigHole{void play();}interface SmallHole{void play();}class SmallHoleHeadSet implements SmallHole{public void play() {System.out.println("放音乐");}}class Adapter implements BigHole{private SmallHole smallHole;public Adapter(SmallHole smallHole){this.smallHole = smallHole;}public void play() {smallHole.play();}}class Phone {private BigHole bigHole;public Phone(BigHole bigHole){this.bigHole = bigHole;}public void play(){bigHole.play();}public BigHole getBigHole() {return bigHole;}public void setBigHole(BigHole bigHole) {this.bigHole = bigHole;}}


这是对象适配器接下来利用的是组合,在适配器中加入被适配的接口实现接下来看一下类适配器:

package com.djk.design.adapter;public class AdapterTest{public static void main(String[] args) {BigHole bigHole = new Adapter();Phone phone = new Phone(bigHole);phone.play();}}interface BigHole{void play();}interface SmallHole{void play();}class SmallHoleHeadSet implements SmallHole{public void play() {System.out.println("放音乐");}}class Adapter extends SmallHoleHeadSet implements BigHole {public void play(){super.play();}}class Phone {private BigHole bigHole;public Phone(BigHole bigHole){this.bigHole = bigHole;}public void play(){bigHole.play();}public BigHole getBigHole() {return bigHole;}public void setBigHole(BigHole bigHole) {this.bigHole = bigHole;}}


这是类适配器利用的是继承,适配器继承被适配的类。相对而言利用组合的要好一些,因为如果使用组合的话则被适配的类可以在运行时候指定可以动态的变化而继承则是在编译期间就已经确定了扩展性没组合好。。。。

还有一种适配器是利用抽象类。比如说当一个接口有很多抽象方法,一个类实现这个接口,可是这个类又没必要实现这个接口里面的所有方法,这时可以用一个抽象类来解决此问题,由抽象类来实现这个接口,不过都是空实现。然后当一个类要实现这个接口的时候只要继承这个抽象类然后覆盖自己想要的方法就OK了。。。

原创粉丝点击