`
zzg
  • 浏览: 124615 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Adapter--适配器模式(五)

阅读更多
这里以一个“指方为圆”的例子来说明适配器模式的原理和简单应用,本例子来自《Java与模式》。

1. 类图




2. Java实现代码

package cn.edu.ynu.sei.adapter;

/**
 * 球体接口<br>
 * 
 * 
@author 88250
 * 
@version 1.0.0, 2007-8-28
 
*/
public interface BallF
{
    
/**
     * 计算表面积
     * 
@return
     
*/
    
public double calculateArea();
    
    
/**
     * 计算体积
     * 
@return
     
*/
    
public double calculateVolume();
    
    
/**
     * 返回半径值
     * 
@return
     
*/
    
public double getRadius();
    
    
/**
     * 设置半径值
     * 
@param radius
     
*/
    
public void setRadius(double radius);
}

package cn.edu.ynu.sei.adapter;

/**
 * 正方体类<br>
 * 这是对象的适配器模式的源角色
 * 
 * 
@author 88250
 * 
@version 1.0.0, 2007-8-28
 
*/
public class Cube
{
    
private double width;
   
    
/**
     * 构造器
     * 
@param width
     
*/
    
public Cube(double width)
    {
    
this.width = width;
    }
    
    
/**
     * 计算体积
     * 
@return
     
*/
    
public double calculateVolume()
    {
    
return width * width * width;
    }
    
    
/**
     * 计算表面积
     * 
@return
     
*/
    
public double calculateFaceArea()
    {
    
return 6 * width * width;
    }

    
/**
     * 
@return the width
     
*/
    
public double getWidth()
    {
        
return width;
    }

    
/**
     * 
@param width the width to set
     
*/
    
public void setWidth(double width)
    {
        
this.width = width;
    }
}

package cn.edu.ynu.sei.adapter;

/**
 * 该类扮演了“指方为圆”适配器角色
 * 
 * 
@author 88250
 * 
@version 1.0.0, 2007-8-28
 
*/
public class MagicFinger implements BallF
{
    
private double radius;

    
private static final double PI = 3.1415926D;

    
private Cube adaptee;

    
public MagicFinger(Cube adaptee)
    {
    
super();
    
this.adaptee = adaptee;
    radius 
= adaptee.getWidth();
    }

    @Override
    
public double calculateArea()
    {
    
return PI * 4.0D * (radius * radius);
    }

    @Override
    
public double calculateVolume()
    {
    
return PI * (4.0D / 3.0D* (radius * radius * radius);
    }

    @Override
    
public double getRadius()
    {
    
return radius;
    }

    @Override
    
public void setRadius(double radius)
    {
    
this.radius = radius;
    }
}

3. 总结

上面实现的是对象的适配器模式,即源角色为类。如果源角色为接口的话则为类的适配器模式,这里不再赘述。
我们经常使用的JDBC就是一个适配器模式的具体应用,还有Linux下的Wine模拟器(可模拟Windows程序)也是适配器模式的应用。
分享到:
评论

相关推荐

    设计模式专题之(八)适配器模式---设计模式适配器模式示例代码(python--c++)

    在压缩包中,`Adapter.cpp`可能是C++实现适配器模式的代码文件,它可能包含了`CPlusPlusClass`和`CppAdapter`的定义。而`Adapter.py`则是Python版本的适配器实现,可能会包含`PythonAdapter`类,它将`CPlusPlusClass...

    设计模式--适配器模式java例子

    在“设计模式--适配器模式java例子”中,我们可以假设有一个遗留的`OldLibrary`,它的接口与我们当前项目的需求不一致。例如,`OldLibrary`有一个`OldDevice`类,它有一个方法`oldMethod()`,而我们的新系统需要一个...

    23种设计模式--适配器模式

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件工程中,这种模式常被用来解决旧系统与新系统、第三方库或者不同组件之间的接口不匹配问题。适配器模式的核心思想是通过创建一个新的类...

    【IT十八掌徐培成】Java基础第06天-06.适配器模式2.zip

    比如,`java.awt.event.Adapter`是事件处理器的一个抽象基类,我们可以创建它的子类,只覆盖我们需要处理的事件方法,而忽略其他事件,这就是对象适配器模式的一个实例。 6. **优缺点** - **优点**:适配器模式能...

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

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在解决系统间的兼容性和接口不匹配问题时。适配器模式的核心思想是将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而无法...

    Android25图灵聊天项目------适配器选择界面展示数据

    在Android开发中,适配器(Adapter)是一个关键组件,特别是在构建用户界面,尤其是涉及到列表、网格或其他可滚动视图时。"Android25图灵聊天项目------适配器选择界面展示数据"这个主题,主要关注如何利用适配器来...

    设计模式--适配器模式

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在解决系统间的兼容性和接口不匹配问题时。适配器模式的核心思想是将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而无法...

    Android开发---适配器

    在Android开发过程中,适配器(Adapter)是一种非常重要的设计模式,它主要应用于数据与UI之间的桥梁搭建,使得视图能够灵活地展示来自不同数据源的数据。简单来说,适配器就像是一个中介者,将复杂的数据结构转换成...

    Adapter(适配器模式)

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件工程中,当系统中存在已有的类或库,而我们希望使用它们的功能,但其接口与我们的需求不匹配时,适配器模式就显得尤为重要。通过适配器,...

    codelab-adapter-4_9_1-win.zip

    在计算机编程中,适配器(Adapter)是一种设计模式,它的作用是使两个不兼容的接口能够协同工作。在这个特定的案例中,codelab-adapter可能是为了使Scratch3与特定的教学平台或设备(如Codelab)进行无缝对接,提供...

    设计模式 - 适配器模式(C++实例)

    在`DesignMode_Adapter`这个压缩包文件中,可能包含了相关的C++源码示例,演示了如何创建和使用适配器模式。这些源码可能包括了目标接口、原始接口、适配器类的定义以及客户端如何通过适配器进行调用的示例。通过...

    adapter-demo.zip

    "adapter-demo.zip"这个压缩包文件很可能包含了一个关于适配器模式的示例代码或者教程,我们可以从这个主题深入探讨适配器模式的相关知识。 适配器模式的主要目的是解决系统中不同组件之间的接口不匹配问题。它通过...

    c++-设计模式之适配器模式(Adapter Pattern)

    适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个接口转换为客户端期望的另一个接口。适配器模式常用于解决由于接口不兼容而无法正常工作的类之间的协作问题。 适配器模式的组成 目标接口(Target...

    设计模式之适配器模式Java实现和类设计图

    文件列表中的"adapter"可能包含了适配器模式的Java源代码文件,这些文件通常会包含以上提到的三个角色的定义。例如,可能会有`Target.java`(目标接口),`Adaptee.java`(被适配者类),以及`Adapter.java`(类...

    PHP设计模式(五)适配器模式Adapter实例详解【结构型】

    适配器模式(Adapter Pattern)是一种结构型设计模式,它主要解决的是接口不兼容的问题,使得原本由于接口差异无法一起工作的类能够协同工作。在PHP中,适配器模式通过创建一个包装类(适配器类)来转换不兼容的接口...

    设计模式-适配器模式(讲解及其实现代码)

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在处理系统集成、遗留代码重用以及不同接口之间兼容性问题时。适配器模式的主要目的是将两个不兼容的接口融合在一起,使得原本无法直接协作...

    java常用设计模式-适配器模式

    java常用设计模式-适配器模式 适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口之间进行通信。这种模式可以在不修改现有代码的情况下重用现有类,并且可以使不兼容的接口之间进行通信。 ...

    适配器模式案例代码

    适配器模式可以通过创建一个Adapter类,实现新的DBConnection2接口,内部持有DBConnection实例,并在Adapter类中转换调用方法,使得客户端可以统一地使用DBConnection2接口。 5. **实现注意事项**: - 适配器的...

    java设计模式之适配器模式

    适配器模式(Adapter Pattern)是通过创建一个新的对象(适配器),这个对象将原本不兼容的对象接口转换为客户端期望的接口,从而使两者能够协同工作。适配器模式可以分为类适配器和对象适配器两种类型。 1. 类...

    keycloak-saml-adapter-core-2.0.0.Final.zip

    【标题】"keycloak-saml-adapter-core-2.0.0.Final.zip" 提供的是Keycloak SAML适配器的核心组件,版本为2.0.0.Final。Keycloak是一个开源的身份和访问管理解决方案,它允许组织保护Web应用程序和服务免受未经授权的...

Global site tag (gtag.js) - Google Analytics