java设计模式5--适配器模式

适配器模式:用武之地-->

将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容

而不能一起工作的那些类可以一起工作

【补充:适配器模式是为了在面向接口编程中更好的复用。如果你的系统中没有使用到

面向接口编程,没有使用到多态,就不会使用到适配器模式。】


配器模式分类: 类器模式,  对象适配器模式;
区别:类器模式通过继承完成适配任务,对象适配器通过组合来完成
(由于在 java 中不支持多重继承,而且继承有破坏封装之嫌,都提倡使用组合来代替)


在eclipse中开发:

测试类: 介绍整体需求, 和实现思路, 并测试最终的结果

/**测试适配器模式: 调用客户端接口,实现想要的所有功能
---->在陆地飞速行进f1(),在海上飞速行进f2(),在天空飞速行进f3();
但是它只实现了部分功能,天上飞功能没有实现,怎么办?
只能添加相应子类来实现了,如果f3()代码太多了的话,
写起来岂不费劲!

而幸运的是有人实现了此方法,于是我就把它拿过来用就行!
通过持有该类对象,调用它的方法,让它去完成相应任务吧,
免得自己亲自再动手造轮子!
*/
public class Test_adapterMode {
	public static void main(String[] args) {
		//调用客户端接口:
		/**原始的客户端:只有两个子类Son1,Son2-----仅有两个方法
		Target_Father f1=new Son1();//该子类:实现了f1()
		Target_Father f2=new Son2();//该子类:实现了f2()
		
		f1.move();//开车到处飞跑......总投入30万
		f2.move();//开轮船到处航行......总投入100万*/
		
		//添加了新功能的客户端:借用了别人的技能,只花很小的代价就实现了f3()
		Target_Father f3=new Son3_Adapter_borrower();//该子类:间接地实现了f3()
		f3.move();;//由航空公司提供飞机,买一张票,就能飞上天....总投入:1千元
	}
}

第一级目录:服务接口【所提供的抽象服务】,第三方供应商擅长的服务【物美价廉,便宜好用】

/**目标对象:提供给客户端调用的接口---实现快速移动的解决方案
----------->子类:
Son1自己购买了汽车,使得在陆地上快速移动,
Son2自己购买了轮船,在海上快速移动
Son3想在天上飞,却不想自己动手解决,找航空公司买一张票(没有自己实现,要借助别人帮忙)
*/
public interface Target_Father {
	 public abstract void move();//使得客户快速移动
}

//第三方供应商==>拥有技能者: 具有某方法的实现
public class Skills_Adaptee_owner {
	public void OneTicketOneFly(){
		System.out.println("由航空公司提供飞机,买一张票,就能飞上天....总投入:1千元");
	}
}

第二级目录:具体的子类实现各自的解决方案

//子类1
public class Son1 implements Target_Father {
	@Override
	public void move() {
		System.out.println("开车到处飞跑......总投入30万");
	}
}

//子类2
public class Son2 implements Target_Father {
	@Override
	public void move() {
			System.out.println("开轮船到处航行......总投入100万");
	}
}

//子类3:
/**缺少某技能者:能力不足,或爱偷懒,没有实现自己的任务,  于是让别人帮忙解决*/
public class Son3_Adapter_borrower  implements Target_Father{
	//属性:持有一个技能辅助者对象
	private Skills_Adaptee_owner owner;
	
	//构造:配置一个技能辅助者对象
	public Son3_Adapter_borrower(){
		owner=new  Skills_Adaptee_owner();
	}
	
	@Override
	public void move() {//借助别人完成自己的任务
			owner.OneTicketOneFly();
	}
}




猜你喜欢

转载自blog.csdn.net/eyeofeagle/article/details/79390094