适配器器模式--Java实现

来源:软件秘笈------设计模式那点事儿

适配器模式(Adapter Pattern)

定义:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因为接口不匹配而无法在一起工作的两个类能够在一起工作,又称为转换器模式、变压器模式、包装模式。

(1)对象适配器模式:在该模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器其调用被包裹的对象的物理实体。

(2)类适配器模式:在该模式下,适配器其继承自己实现的类。

下面以对象适配器为例。

模式类图结构:


使用场合:

(1)、软件系统结构需要升级或扩展,又不想影响原有系统的稳定运行的时候。

(2)、转换类三支箭的差别不是太大的时候。

(3)、像创建一个可以服用的类,该类可以与其他不相关的类,或不可预见的类协同工作的时候。


代码实现:

//电源基类,提供电压值和电源单位
package com.demo.power;

public abstract class AbsBasePower {
	private float power;         //电压值
	private String unit = "V"; //电压单位
	
	public AbsBasePower(float power)
	{
		this.power = power;
	}

	public float getPower() {
		return power;
	}

	public void setPower(float power) {
		this.power = power;
	}

	public String getUnit() {
		return unit;
	}

	public void setUnit(String unit) {
		this.unit = unit;
	}
	

}


//220V电源接口
package com.demo.power.v220;

public interface IPower220 {
	
	public void output220v();

}

//220V电源
package com.demo.power.v220;

import com.demo.power.AbsBasePower;

public class Power220 extends AbsBasePower implements IPower220{

	public Power220(){
		super(220);
	}

	@Override
	public void output220v() {
		System.out.println("------- 这是"+this.getPower()+this.getUnit()+"电源-----");
		
	}
	

}

//12V电源接口
package com.demo.power.v12;

public interface IPower12  {
	//输出12v电压s
	public void output12V();
	
}
//12V电源对象适配器
package com.demo.power.v12;

import com.demo.power.AbsBasePower;

public class AdapterPower12 implements IPower12 {
	private final AbsBasePower absBasePower;
	
	public AdapterPower12(AbsBasePower absBasePower){
		this.absBasePower = absBasePower;
	}

	@Override
	public void output12V() {
		float powerFloat = this.absBasePower.getPower();
		if(powerFloat == 380){
			powerFloat /= 31.67f;
		} 
		else if(powerFloat == 220){
			powerFloat /= 18.33f;
		}
		else if (powerFloat == 110){
			powerFloat /= 9.17f;
		}
		else{
			System.out.println("不能适配电源");
		}
		
		//处理转换结果
		powerFloat = (int) (powerFloat * 10)/10.0f;
		
		System.out.println("------- 这是"+powerFloat+this.absBasePower.getUnit()+"电源-----");
		
	}

}

//测试对象适配器
package com.demo;

import com.demo.power.v12.AdapterPower12;
import com.demo.power.v12.IPower12;
import com.demo.power.v220.Power220;

public class Client {
	public static void main(String[]  args){
		Power220 power220 = new Power220();
		
		System.out.println("适配器转换之前");
		power220.output220v();
		System.out.println("适配器开始转换。。。。。。");
		System.out.println("适配器转换之后");
		IPower12 adapterPower12 = new AdapterPower12(power220);
		adapterPower12.output12V();
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
适配器模式是一种结构设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。在Java中,可以使用以下步骤来实现适配器模式: 1. 定义目标接口(Target Interface):这是客户端所期望的接口。它描述了客户端可以使用的方法。 2. 创建适配器类(Adapter Class):适配器实现了目标接口,并包含一个对适配者对象的引用。它将客户端的请求转发给适配者。 3. 创建适配者类(Adaptee Class):适配者类是需要被适配的类,它包含了一些客户端不直接支持的方法。 下面是一个简单的示例,展示了如何在Java实现适配器模式: ```java // 目标接口 interface Target { void request(); } // 适配者类 class Adaptee { public void specificRequest() { System.out.println("Adaptee: specificRequest"); } } // 适配器类 class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } public void request() { adaptee.specificRequest(); } } // 客户端代码 public class Main { public static void main(String[] args) { Adaptee adaptee = new Adaptee(); Target target = new Adapter(adaptee); target.request(); } } ``` 在上面的示例中,Adaptee类是需要被适配的类,它有一个specificRequest方法。Adapter类实现了Target接口,并将请求转发给Adaptee类的specificRequest方法。客户端代码创建了一个Adapter对象,并通过调用Target接口的request方法来发起请求。 这就是一个简单的Java实现适配器模式的例子。适配器模式可以帮助我们将不兼容的接口进行适配,提高代码的复用性和灵活性。希望能对您有所帮助!如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值