适配器模式

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

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

类的适配器模式: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,欢迎下载

转载于:https://my.oschina.net/sunchm/blog/1588910

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值