JAVA-适配器模式

       在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

基本概念

客户:需要调用我们的代码的对象。
Adapter模式的宗旨:保留现有类所提供的服务,向客户提供接口,以满足客户的期望。

主要内容

(1)类适配器:
当客户在接口中定义了他期望的行为时,我们就可以应用适配器模式,提供一个实现该接口的类,并且扩展已有的类,通过创建子类来实现适配。
下面是类适配器的UML图:
(2)对象适配器:
对象适配器”通过组合除了满足“用户期待接口”还降低了代码间的不良耦合。在工作中推荐使用“对象适配”。下面是对象适配器的UML图:
(3) 缺省适配器模式:
缺省适配器模式是一种特殊的适配器模式,但这个适配器是由一个抽象类实现的,并且在抽象类中要实现目标接口中所规定的所有方法,但很多方法的实现都是“平庸”的实现,也就是说,这些方法都是空方法。而具体的子类都要继承此抽象类。
示范代码:

原先只有生产三星电视的类:

package test.edu.adaptee;


public class SamSungTV {
	
	public void createSamSungTV(){
		System.out.println("生产了三星电视机");
	}
}

现在客户要求不仅要能生产三星电视 还有能生产长虹电视:

那么为了不影响原来三星电视的生产线,我们需要加上一条新的生产线生产长虹电视,这时候可以考虑用适配的方式添加一层适配层,客户直接访问适配层,想要那个电视就选那个:

为客户提供的接口:

package test.edu.adaptee;

public interface TargetInterface {
	public void createSamSungTV();
	public void changHongTV();
}

具体的适配器类:

package test.edu.adaptee;

public class Adapter extends SamSungTV implements TargetInterface {

	@Override
	public void changHongTV() {
		// TODO Auto-generated method stub
		System.out.println("生产了长虹电视机");
	}

}

客户端:

package test.edu.adaptee;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		TargetInterface ad = new Adapter();
		ad.createSamSungTV();
		ad.changHongTV();
	}
}


当有第二个客户说我要需要海信电视 ,这时候我们需要在扩展出一个适配器,而不需要修改之前的适配器(开闭原则,里氏替换原则, 接口隔离原则


新的接口:

package test.edu.adaptee;


public interface TargetInterface2 extends TargetInterface {
	public void createHaiXinTV();
}

新的适配器:

package test.edu.adaptee;

public class Adapter2 extends Adapter implements TargetInterface2 {

	@Override
	public void createHaiXinTV() {
		// TODO Auto-generated method stub
		System.out.println("生产了海信电视");
	}

}

客户端:

package test.edu.adaptee;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("===适应客户1的要求===");
		TargetInterface ad = new Adapter();
		ad.createSamSungTV();
		ad.changHongTV();
		
		System.out.println("===适应客户2的要求===");
		TargetInterface2 ad1 = new Adapter2();
		ad1.createSamSungTV();
		ad1.changHongTV();
		ad1.createHaiXinTV();
	}
}

结果:

===适应客户1的要求===
生产了三星电视机
生产了长虹电视机
===适应客户2的要求===
生产了三星电视机
生产了长虹电视机
生产了海信电视



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值