适配器模式

适配器模式:

  把一个类的接口变换成客户端所能接受的另一种接口,从而使两个接口不匹配而无法再一起工作的两个类能够在一起工作。

  注:可以研究inputStreamReader。

  现有两个接口Target Adaptee。Traget接口有方法showInfo(),Adaptee接口有方法info()。

package com.zhao.service;
/**
 * Target(目标接口):所要转换的所期待的接口
 * @author zhao
 *
 */
public interface Target {
    public void showInfo();
}
package com.zhao.service;
/**
 * 需要适配的接口
 * @author zhao
 *
 */
public interface Adaptee {
    public String info();
}

现在的情况是,Target接口和Adaptee接口无法在一起工作,但是Target接口需要用到Adaptee接口,不然无法显示信息。所以需要一个适配器。

package com.zhao.service.impl;

import com.zhao.service.Adaptee;
import com.zhao.service.Target;

public class Adaper implements Target {
    private Adaptee adaptee;
    public Adaper(Adaptee adaptee) {
        this.adaptee=adaptee;
    }
    
    @Override
    public void showInfo() {
        System.out.println(adaptee.info());
    }

}

当需要显示信息时,在主方法里:

package com.zhao.main;

import com.zhao.service.Target;
import com.zhao.service.impl.Adaper;
import com.zhao.service.impl.AdapteeImpl;

public class Main {

    public static void main(String[] args) {
        Target target=new Adaper(new AdapteeImpl());
        target.showInfo();
    }

}

AdapettImpl继承了接口Adaptee。

package com.zhao.service.impl;

import com.zhao.service.Adaptee;

public class AdapteeImpl implements Adaptee{

    @Override
    public String info() {
        return "zhao";
    }
}

由此可以看出:适配器主要是为了整合两个实现类,他们各自实现了一个接口,这两个接口并不能一起工作,以至于两个类不能一起工作,我们可以把其中的一个类用作适配器类,它实现了自己的接口,重写了相应的方法。在此时,给它添加了一个另外一个接口的对象,通过构造函数或者是setter方法,传进来另外接口的实现类,在适配器类重写的方法中,进行对另外接口方法的操作。

  (以下内容摘自  许令波《深入分析Java Web技术内幕》)

   InputStreamReader实现了Reader接口,并且持有了InputStream的引用,这里是通过StreamDecoder类简介持有的,因为从byte到char要经过编码。很显然,适配器就是InputStreamReader类,源角色就是InputStream代表的实例对象,目标接口就是Reader类。

  

posted @ 2016-04-09 20:13  假寐的我  阅读(211)  评论(0编辑  收藏  举报