Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

设计模式——适配器模式

$
0
0

适配器模式就是将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式分为两种,一种是类适配器模式,一种是对象适配器模式(也就是跟我们的组合模式配合使用)
适用性:
1.你想使用一个已经存在的类,而它的接口不符合你的需求。
2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
3.(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
在我们的日常生活中所使用的充电器就是最好的适配器模式,我们的手机都是需要充电的,如果没有充电器的话,我们的手机是不可能自己会接收。
这里写图片描述
下面我们就以手机充电来
电源

public class PowerSupply {
    public void request(){
        System.out.println("我是电源");
    }
}

接口

public interface Target {
    void handleRequest();
}

充电器

public class Adapter extends PowerSupply implements Target {
    @Override
    public void handleRequest() {
        super.request();
    }
}

手机

public class Phone extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MainActivity mainActivity = new MainActivity();
        Target target = new Adapter();
        mainActivity.test(target);
    }

    public void test(Target t){
        t.handleRequest();
    }
}

上面的适配器模式是一个类适配器模式,也就是说Adapter extends PowerSupply 因为继承只能单继承,导致不够灵活,所以我们还有另一种适配器可以跟我们的组合一起使用叫做对象适配器模式。
修改后的对象适配器模式为

public class ObjectAdapter implements Target {
    private PowerSupply powerSupply;

    public ObjectAdapter(PowerSupply powerSupply) {
        this.powerSupply = powerSupply;
    }

    @Override
    public void handleRequest() {
        powerSupply.request();
    }
}

手机里面的调用就有了稍微的改变

public class Phone extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MainActivity mainActivity = new MainActivity();
        PowerSupply powerSupply = new PowerSupply();
        Target target = new ObjectAdapter(powerSupply);
        mainActivity.test(target);
    }

    public void test(Target t){
        t.handleRequest();
    }
}

适配器模式到这里就结束了,如有疑问欢迎留言。

作者:u014452224 发表于2017/2/20 15:43:39 原文链接
阅读:38 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>