设计模式(七)---适配器模式

网摘:

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那个类可以一起工作。

 适用性

 
    1.你想使用一个已经存在的类,而它的接口不符合你的需求。
 
    2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作。
 
    3.你想使用一些已经存在的子类,但是不可能对每一个都进行
      子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

 

个人理解:

适配器,见文思义。我们在生活中也用过适配器,比如笔记本的电源线就是适配器。

一般家用的电压都是220v的,笔记本的电压绝对不可能到220,一般都是几十伏。但是我们在用电源的时候,

连接的就是220v的电压,之所以能正常工作就是有一个适配器把电压调到了合适的度。

在编程时,你可能遇到过这种情况,我的一个对象类需要继承一个接口,但是目前这个对象类已经存在了和这个接口

描述功能一样的方法。我要么修改这个对象类,去实现目标接口,要么把目标接口中的方法改成和现在的对象类一致。

实际上两种方案都不太现实。如果使对象类实现目标接口,那我需要修改整个类,如果这个类是接口或者抽象类,那就影响到所有

的子类,这个影响太巨大了。即使是一个简单的类,在某些情况下,你也不一定可以修改代码。假如我,修改目标接口,把目标接口

改成现在对象类已有的方法,使他们一致。这样更不可取。应为接口是描述对象行为的,之所以有接口就是为了以后有一个标准。

一旦标准建立,就不可能随便改,因为它涉及的范围更广,影响更大。

好比我们使用的笔记本电脑是20v,国家供电220v。不可能让国家为了你的笔记本能正常用电就专门提供一个20v的电压。

同样,笔记本的电压也不可能因为国家供电是220v,就设计成220v。唯一的办法就是做一个适配器。

 

下面是结构图

 

1,目标接口Electricity

package org.test.design.adapter;

public interface Electricity {
	
	void powerOn220v();//国家供电单相220v
	void powerOn380v();//国家供电三相380v
}


2,对象IProduct

package org.test.design.adapter;

public interface IProduct {
	public void initPowerOn();
}


3,具体对象(实现IProduct接口)

package org.test.design.adapter;

public class Computer implements IProduct{
	
	//接通电源20v
	public void initPowerOn(){
		System.out.println("I am Computer.My power is on and my Voltage is 20v.");
	}

}


 

package org.test.design.adapter;

public class Cellphone implements IProduct{
	//接通电源4.2v
	public void initPowerOn(){
		System.out.println("I am Cellphone.My power is on and my Voltage is 4.2v.");
	}
}


4,适配器Adapter

package org.test.design.adapter;

/**
 * 
 * @author lushuaiyin
 *
 */
public class Adapter implements Electricity{
	private IProduct product;
	
	public Adapter(IProduct product){
		this.product=product;
	}
	public void powerOn220v() {//只对220用电适配
		product.initPowerOn();
	}

	public void powerOn380v() {//不属于家用电器的电压,不做适配
		System.out.println("Adapter is not suitable for 380v.");
	}
	
	public void sayHello(){
		System.out.println("I am an adapter for 220v.");
	}
}


 

5,客户端测试

package org.test.design.adapter;

public class TestMain {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		IProduct computer=new Computer();
		Electricity powerForComputer=new Adapter(computer);
		powerForComputer.powerOn220v();
		
		IProduct phone=new Cellphone();
		Electricity powerCellphone=new Adapter(phone);
		powerCellphone.powerOn220v();
		
	}

}
/*打印
I am Computer.My power is on and my Voltage is 20v.
I am Cellphone.My power is on and my Voltage is 4.2v.

 */


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值