您的位置:首页 > 编程语言 > Java开发

java设计模式之适配器模式(6)

2014-07-29 13:46 253 查看
属于结构型模式。适配器这三个字在生活中很常见。举个最简单的例子,那就是变压器,它可以把几万伏的高压变成我们生活用电220伏。

变压器就是一种适配器。适配器模式的作用就和生活中的适配器的作用是很相似的。

总之就是将某个类的接口转换成客户端期望的另一个接口表示。

属于结构型模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式

类的适配器模式:

比如我们游戏中有一个马的类Horse,如下:

package com.pattern.struct.adapter.cla;

public class Horse {//马

	
	public void walk(){
		System.out.println("I can walk...");
	}
	
	
}




只有一个walk(行走)方法。有很多马都调用我这个walk接口(方法)。但是之后其中有一种要求马要能fly(飞行)。

这时候我们怎么办呢?最简单的方法就是,直接在Horse类中加一个fly方法。但是有个问题,我们这么一加之后所有的马都能

飞了,毕竟只有一个种马会飞。我们用适配器模式来实现。

首先确定这种马需要的接口。

package com.pattern.struct.adapter.cla;

public interface HorseFly {

	public void walk();
	
	public void fly();
	
}


适配器

package com.pattern.struct.adapter.cla;

public class AdapterFly extends Horse implements  HorseFly{

	@Override
	public void fly() {
		System.out.println("I can fly...");
	}

	
	
}




package com.pattern.struct.adapter.cla;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		HorseFly adapter = new AdapterFly();
		
		adapter.walk();
		
		adapter.fly();
		
	}

}


这里面有个奇妙的问题 接口HorseFly中有walk方法,Horse中也有walk方法。那么AdapterFly会继承哪个方法呢?可能好多人纠结这个问题。

经测试两个都继承,就好像是把两个糅合成了一个。哈. 深入没有研究,如果有明白的同学,请留言科普一下,谢谢。



对象的适配器模式:

采用组合的方式实现,类适配器是采用继承的方式实现。看下面代码:

package com.pattern.struct.adapter.obj;

import com.pattern.struct.adapter.cla.Horse;
import com.pattern.struct.adapter.cla.HorseFly;

public class AdapterFly implements  HorseFly{

	private Horse horse;
	public AdapterFly(Horse horse){
		this.horse = horse;
	}
	
	@Override
	public void walk() {
		this.horse.walk();
	}

	@Override
	public void fly() {
		System.out.println("I can fly...");
	}

	
	
}


采用组合的方式实现,类适配器是采用继承的方式实现.

接口的适配器模式:

package com.pattern.struct.adapter.inter;

import com.pattern.struct.adapter.cla.HorseFly;

public class AbstractHorse implements HorseFly{

	@Override
	public void walk() {
		
	}

	@Override
	public void fly() {
		
	}

	
}




package com.pattern.struct.adapter.inter;

public class WalkHorse  extends AbstractHorse{

	@Override
	public void walk() {
		System.out.println("I can walk");
	}
	
	

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: