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

12 篇文章 0 订阅
12 篇文章 6 订阅

属于结构型模式。适配器这三个字在生活中很常见。举个最简单的例子,那就是变压器,它可以把几万伏的高压变成我们生活用电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");
	}
	
	

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值