设计模式之-----适配器模式

今天来说一说适配器模式,我先来举个例子,我们国家的电压是220V,可能有的国家是110V,那如果我们去旅游,到了那里想给手机充电怎么办呢?直接冲肯定不行,可能还会s损坏手机,这时候我们就需要一个转换器了,吧110v转换为220v,这样就可以了。这个时候,这个转换器就充当了适配器的角色。

学习之前我们先了解一下概念

1、目标接口(Target):客户所期待的接口。通俗的来讲,就是我们所需要的220v电压,我们希望有220v的电压用,我们并不关系具体这个电压怎么来的额,能用就行。所以这里这个220v就是我们的目标接口。

2、适配器(Adapter):在这里,指的就是那个转换器,是能看的见摸得着的,反正就是一个具体的物体,进去110v出来就是220v。

3、需要适配的类(Adaptee):在这里指的就是那个110v电压,是待转换的对象。


明确概念之后,我们来看看代码,先看包结构


先来看看接口

package com.adapt.target;

/**
 * 客户需要的的电压数
 * @author ZHENGWEI
 * @date Jul 30, 2015
 */
public interface Target220V {

	/**
	 * 不管多少伏的电压,经过转换后输出的就是220V
	 * @param v 原来的电压数
	 */
	public void convert220V(int v);
}

具体实现类(注意这个类可以不写)具体等一会儿再说

package com.adapt.target.impl;

import com.adapt.target.Target220V;

/**
 * 这是转换电压的具体实现类,也即,适配器的具体转换操作的类
 * @author ZHENGWEI
 * @date Jul 30, 2015
 */
public class ConcreteTarget220V implements Target220V {

	/**
	 * 不管多少伏的电压,经过转换后输出的就是220V
	 * @param v 原来的电压数
	 */
	public void convert220V(int v) {
		System.out.println("原来的电压是:"+v+"伏");
		System.out.println("现在正在进行电压转换");
		System.out.println("现在的电压变成了220V");
	}

}

待适配的类

package com.adapt.adaptee;

/**
 * 这个类代表原来固有的类,我们想使用这个类,但是却不符合我们的标准
 * 那么我们就要用适配器来转换它
 * @author ZHENGWEI
 * @date Jul 30, 2015
 */
public class Adaptee110V {

	/**
	 * 原来这个国家的电压
	 * @return
	 */
	public int YuanLaiDeDianYa(){
		return 110;
	}
}

这个是适配器类

在这里,这个方法可以替换之前那个可以不存在的类,他们的效果是一样的

package com.adapt.adapter;

import com.adapt.adaptee.Adaptee110V;
import com.adapt.target.Target220V;
import com.adapt.target.impl.ConcreteTarget220V;

/**
 * 适配器类,可以想象成笔记本电脑电源线的那个黑色的方块
 * @author ZHENGWEI
 * @date Jul 30, 2015
 */
public class Adapter extends Adaptee110V implements Target220V{

	/**
	 * 适配器的转化方法
	 */
	public void convert220V(int v) {
		ConcreteTarget220V concreteTarget220V = new ConcreteTarget220V();
		concreteTarget220V.convert220V(v);
	}

}

最后来一个测试方法

package com.adapt.main;

import com.adapt.adaptee.Adaptee110V;
import com.adapt.adapter.Adapter;

public class AdaptMain {

	public static void main(String[] args) {
		Adaptee110V adaptee110V = new Adaptee110V();
		System.out.println("原来这个国家的电压是:"+adaptee110V.YuanLaiDeDianYa()+"伏");
		
		System.out.println("=============================================");
		System.out.println("现在开始使用适配器");
		System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
		
		Adapter adapter = new Adapter();
		adapter.convert220V(adaptee110V.YuanLaiDeDianYa());
	}

}

然后是结果


注意:

适配器模式大部分时候并不适用于初期开发阶段,而是适用于后期维护增加新需求的阶段,它只在特定的场合下使用才能取得最大的效果,比如上边的例子,我们对于电压的问题,我们不可能要求那个国家把电压变成220v,也不可能去改装自己的手机去适应110v,这个时候就要一个折中的办法,即适配器模式。代码也是这样,如果两个类都不可以更改,那么我们就采用适配器模式,当有挽回的余地的时候,我们还是尽量考虑重构。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值