适配器模式

来源:互联网 发布:高见泽俊彦 知乎 编辑:程序博客网 时间:2024/06/01 20:28

适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

适配器模式有类的适配器模式和对象的适配器模式两种不同的形式。类图如下:

类的适配器模式:Adapter与Adaptee是继承关系。
输入图片说明

对象的适配器模式:Adapter和Adaptee不是继承关系,而是使用委派关系连接到Adaptee类。
输入图片说明

举个栗子:

指方为圆:客户接收一个正方体,返还此正方体的内切球。
类图和代码如下:

输入图片说明

package adapter;//适配器模式的源角色public class Cube {    private double width;    public Cube(double width){        this.width = width;    }    //计算体积    public double calculateVolume(){        return width * width * width;    }    //计算面积    public double calculateFaceArea(){        return width * width;    }    public double getWidth() {        return width;    }    public void setWidth(double width) {        this.width = width;    }}
package adapter;//目标接口角色public interface BallIF {    /**     * 计算面积     */    public double calculateArea();    /**     * 计算体积     */    public double calculateVolume();    /**     * 半径的取值方法     */    public double getRadius();    /**     * 半径的赋值方法     */    public void setRadius(double radius);}
package adapter;//适配器角色public class MagicFinger implements BallIF {    private double radius = 0;    private static final double PI = 3.14d;    private Cube adaptee;    public MagicFinger(Cube adaptee){        this.adaptee = adaptee;        radius = this.adaptee.getWidth()/2.0d;    }    @Override    public double calculateArea() {        return PI * (radius * radius);    }    @Override    public double calculateVolume() {        return PI * 4.0d/3.0d * (radius * radius * radius);    }    @Override    public double getRadius() {        return radius;    }    @Override    public void setRadius(double radius) {        this.radius = radius;    }}

适配器模式源码:适配器模式代码demo,欢迎下载

原创粉丝点击