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

来源:互联网 发布:c语言面向对象吗 编辑:程序博客网 时间:2024/05/22 20:29

今天来说一说适配器模式,我先来举个例子,我们国家的电压是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
原创粉丝点击