适配器设计模式初探(Java实现)

  本篇随笔主要介绍Java实现设配器设计模式。

    先来看下待解决的问题:

    (图片转自http://blog.csdn.net/jason0539)

      由上图的情况可知,欧洲壁式插座只有三足插口,如果我们想要使用的是两足插口,就需要适配器来进行转换。(适配器一面是三足插口,一面是两足插口)

    

     适配器模式一般有两种实现方式: 1、类适配器  2、对象适配器。

     先来看下类适配器的UML图:

     

      客户端只能操纵 Target 接口的 Request 方法来进行需要的操作(当然这里就相当于调用 Request 方法使用 两足插口 进行充电)。而接口具体的实现类有两种,一种是调用 ConcreteTarget 的        Request 方法进行充电(在例子中相当于直接把 两足插口 插入到 两足插座 上,遗憾的是我们现在在欧洲,而欧洲是没有 两足插座 的,只有 三足插座 ,所以 ConcreteTarget 的Request方法我们是不能使用的)。还有一种是调用 Adaptee类 的 SpecificRequest 方法进行充电(这相当于使用  三足插座 进行充电,可是我们现在只有 两足插口 ,是不能将其插入到 三足插座 中进行充电的,换句话说,Adaptee        类的 SpecificRequest 方法我们无法直接调用),这时我们就需要用到 适配器类 Adapter 来将 Adaptee 类的 SpecificRequest 方法转化为我们可以调用的 Request 方法。

    接下来看具体的代码实现:

    

 1 interface Target {
 2     void Request();//规定两足插头充电标准,必须插入两足插座
 3 }
 4
 5 class Adaptee {
 6     public void SpecificRequest() {
 7         System.out.println("把三足插头插在我身上可以进行充电");
 8     }
 9 }
10
11 class Adapter extends Adaptee implements Target {
12
13     @Override
14     public void Request() {
15         // TODO Auto-generated method stub
16
17         //先调用父类的SpecificRequest方法,相当于把转换器的一头插在欧洲的三足插座上,
18         //另一头就可以给两足插头进行充电了
19         super.SpecificRequest();
20
21         System.out.println("把两足插头插在我身上可以进行充电");
22     }
23
24 }
25 public class Client {
26
27     public static void charge(Target target) {
28         //客户调用 Request 方法进行充电
29         target.Request();
30     }
31
32     public static void main(String[] args) {
33         Adapter ad = new Adapter();//在欧洲先买一个转换器
34         charge(ad);//利用转换器进行充电
35     }
36
37
38 }

    

    运行结果:

    

    可见两足插头也可进行充电。

    2、对象适配器模式实现

    UML图:

    

    实现方式与类适配器实现方式大致相同,只不过将 Adapter 从 Adaptee 类继承 改为  Adapter 持有 Adaptee 类对象。

    

 1 interface Target {
 2     void Request();//规定两足插头充电标准,必须插入两足插座
 3 }
 4
 5 class Adaptee {
 6     public void SpecificRequest() {
 7         System.out.println("把三足插头插在我身上可以进行充电");
 8     }
 9 }
10
11 class Adapter implements Target {
12
13     private Adaptee adaptee;
14
15     public Adapter(Adaptee adaptee) {
16         this.adaptee = adaptee;
17     }
18
19     @Override
20     public void Request() {
21         // TODO Auto-generated method stub
22         adaptee.SpecificRequest();
23
24         System.out.println("把两足插头插在我身上可以进行充电");
25     }
26
27 }
28 public class Client {
29
30     public static void charge(Target target) {
31         //客户调用 Request 方法进行充电
32         target.Request();
33     }
34
35     public static void main(String[] args) {
36         Adapter ad = new Adapter(new Adaptee());//在欧洲先买一个转换器并将其一端插入三足插座
37         charge(ad);//利用转换器进行充电
38     }
39
40
41 }

    

    运行结果同上。

    适配器设计模式一般用于系统后期扩展、修改。

    参考文章:http://blog.csdn.net/ymeng_bupt/article/details/6833480

         http://blog.csdn.net/jason0539/article/details/22468457

    

    

    

时间: 2024-12-29 07:55:48

适配器设计模式初探(Java实现)的相关文章

适配器设计模式

类的适配器模式 对象的适配器模式 接口的适配器模式 思想: 将类的某个接口转换成客户端期望的另一个接口表示 目的: 消除由于接口不匹配造成的类的兼容性问题 1.UML图之类的适配器设计模式 public class Source { 2. 3. public void method1() { 4. System.out.println("this is original method!"); 5. } 6.} [java] view plaincopy 1.public interfa

【ThinkingInJava】12、适配器设计模式

/** * 书本:<Thinking In Java> * 功能:适配器设计模式 * 文件:Processor.java * 时间:2015年4月2日20:36:59 * 作者:cutter_point */ package Lesson9Interfaces.interfaceprocessor; public interface Processor { String name(); Object process(Object input); } /** * 书本:<Thinking

【ThinkingInJava】14、适配器设计模式 (2)

/** * 书本:<Thinking In Java> * 功能:适配器设计模式 * 文件:FilterAdapter.java * 时间:2015年4月2日20:52:07 * 作者:cutter_point */ package Lesson9Interfaces.interfaceprocessor; import Lesson9Interfaces.filters.BandPass; import Lesson9Interfaces.filters.Filter; import Les

接口 interface 以及适配器设计模式原理

定义接口用的不是class,而是interface. 接口中常见的成员:而且这些成员都是固定的修饰符. 1.全局变量:public static final (不写的时候java会默认添加上去,但是阅读性不好) 2.抽象方法:public abstract 接口中的成员都是公共权限的. 类与类之间是继承关系,类与接口之间是实现关系. 接口实现implements 接口不可以实例化,只能由实现了接口的子类覆盖了接口中所有的抽象方法后,该子类才可以实例化,否则这个子类就是一个抽象类. 在java中不

初探Java序列化(Serialization)

Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化Deserialization是一种将这些字节重建成一个对象的过程.[字节流的来回转换] Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端.这就需要有一种可以在两端传输数据的协议.Java序列化机制就是为了解决这个问题而产生. 将对象状态转换成字节流之后,可以用java.io包中各种字节流的类将其保存到文件中,管道到另一线程中或通过网络连接将对象数据发送到另一主机.对象序

初探Java序列化(2)-writeObject/readObject

上一篇<初探Java序列化(Serialization)>给我们大体介绍了什么是序列化和反序列化,以及解析了一下序列化出来的文件.接着我们看看JDK具体如何序列化一个Object. 在序列化过程中,虚拟机会试图调用对象类里的writeObject() 和readObject(),进行用户自定义的序列化和反序列化,如果没有则调用ObjectOutputStream.defaultWriteObject() 和ObjectInputStream.defaultReadObject().同样,在Ob

设计模式初探—简单工厂模式

为什么要学习设计模式? 可重用.可维护.可扩展.灵活性好 什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 简单工厂模式的好处? (1)将具体业务和实现进行分离 (2)将多个具体业务之间进行解耦 解决的问题? 单独的类来创造

6.适配器设计模式

public interface PinPlug{ void charge(); } 1.概述 适配器设计模式针对如下情况:-----客户需要用某个接口,但是能提供服务的接口没有实现那个接口. 客户端只能使用某种接口---客户端是台灯,接口是双孔插座 服务端----服务类是三孔插座 适配器类是服务类和客户端中间的一个桥接类---插线板 2.代码 适配器模式的分类: 类适配器----通过继承实现 对象适配器--通过组合实现 2.1类适配器 功能描述:为台灯充上电照明(台灯只能使用双孔插座) pub

适配器设计模式简介

适配器模式是将将一个类的接口适配成用户所期待的. 生活中适配器也无处不在.常见的是电源适配器.一个15V笔记本通过电源适配器可以接在220V的电压下使用. 想象这么一个需求场景.在项目早期建立了很多类库,这个类库中方法众多,代码复杂,加入新的方法后或者修改旧有方法会使得原类库中方法大幅修改.(或者类库源码找不到了,也难以进行修改).那么此时可以重新建立一个新接口,通过适配器而使用原有方法. 适配器模式就是将一个接口转化为客户希望的另一个接口. 适配器的常用分类: 现在主要介绍单向适配器和单接口适