设计模式之适配器模式

来源:互联网 发布:如何优化淘宝排名 编辑:程序博客网 时间:2024/06/10 03:03

目的:
1、理解适配器模式的含义及该模式的角色关系
2、理解两种模式的区别
3、领悟适配器模式是如何通过“组合”和“继承”实现代码重用
4、学会灵活运用适配器解决问题

定义:
适配器模式将一个类的接口,转换成客户期望的另一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

目的:解决不兼容不匹配的问题
原本接口->适配器->目标接口

适配器与目标类共同实现相同的接口,然后适配器类中以目标类为属性,然后经过添加业务逻辑把原来类转换成目标类

适配器代码

/**
* 将两孔插座变成三孔插座的适配器
*/

public class TwoToThreePlugAdapter implements ThreePlugInf //实现三孔插座的接口,这样就可以使该适配器变成三孔插座对象{    private TwoPlug twoPlug;    /**     * 适配器需要一个两孔插座对象     */    public TwoToThreePlugAdapter(TwoPlug twoPlug)    {        this.twoPlug=twoPlug;    }    @Override    public void powerThreePlug()    {        twoPlug.powerTwoPlug(); //在三孔插座方法中写入两孔插座的供电方法。    }}/** * 三孔插座  */public interface ThreePlugInf{    public void powerThreePlug();}/** * 两孔插座  */public class TwoPlug{    public void powerTwoPlug()    {        System.out.println("两孔插座供电中.......");    }}

适配器模式测试代码

/**
* 适配器模式
* 解释:当两个对象彼此不兼容的时候,使用适配器将其兼容
* 示例:笔记本电脑需要一个三孔插座,而现在只有一个两孔插座,所以要出一个适配器类来将三孔插座转化为两孔插座,使其兼容笔记本
*/

public class LaptopTest{    private ThreePlugInf threePlugInf;//笔记本所需的三孔插座    public LaptopTest(ThreePlugInf threePlugInf)    {        this.threePlugInf=threePlugInf;    }    public ThreePlugInf getThreePlugInf()    {        return threePlugInf;    }    public static void main(String[] args)    {        TwoPlug twoPlug=new TwoPlug(); //现在只有一个两孔插座        TwoToThreePlugAdapter adapter=new TwoToThreePlugAdapter(twoPlug);        LaptopTest laptop=new LaptopTest(adapter); //笔记本需要三孔插座        laptop.getThreePlugInf().powerThreePlug();//调用三孔插座方法测试。    }}

适配器分类

1 组合
采用组合方式的适配器成为对象适配器
特点:把”被适配器者”作为一个对象组合到适配器类中,以修改目标接口包装被适配者
2 继承
采用继承方式的称为类适配器
特点:通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类实现适配

适配器的作用

1.透明
通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的。
2.重用
复用了现存的类,解决了现存类和复用环境要求不一致的问题。
3.低耦合
将目标类和适配器类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原油代码(遵循开闭原则)

适配器模式的类图,适配器让客户端只需要使用一个接口就可以实现让被适配者转换成适配者来正常工作,客户端调用的接口下面可以有一个抽象的适配器来实现这个适配器接口,其实也可以是一个具体类,这样做的目的是今后可以实现加入多个新的适配器的扩展工作,然后下面有具体的适配器类用于继承适配器抽象类,这个类实现了适配者的方法,我们可以做一个接口的成员变量,在构造方法中赋值这一变量,这个接口就是被适配者接口,同样为了可以适配多种被适配者。

参考视频:http://www.imooc.com/learn/146

原创粉丝点击