Adapter--适配器模式(五)

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

1. 类图


Adapter--适配器模式(五)_第1张图片

2. Java实现代码

package  cn.edu.ynu.sei.adapter;

/**
 * 球体接口

 * 
 * 
@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;

/**
 * 正方体类

 * 这是对象的适配器模式的源角色
 * 
 * 
@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程序)也是适配器模式的应用。

你可能感兴趣的:(Linux,JDBC,Windows)