Adapter模式

Adapter模式

GOF《设计模式》一书对Adapter模式是这样描述的:
  

将一个类的接口转换成客户希望的另外一个接口。

Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作。


demo:

需求:

1) 为都有“显示”行为的点、线、正方形分别创建类。

2) 客户对象不必知道自己到底拥有点、线、还是正方形。它只需知道拥有这些形状中的一个。

解决方法: 

  即可以用一个更高层次的概念将这些具体形状都涵盖进去,这个高层概念可以称为:

  “可显示的形状”。因此,我们需要创建一个接口Shape:

interface Shape

{

    public void display();

}

需求变更:

现在客户忽然间需要给这个系统增加一个画圆的功能。

解决方法:

这个看起来很简单,只需定义一个Circle类来实现Shape接口,但是我们要给它编写display方法,这可不是件简单的事。

假如此时我们正好发现一个XXCircle类,它有一个方法刚好可以完成这个功能,

那么有没有更好的方法来利用它呢,这时我们就要用到Adapter模式了。

XXCircle代码如下:

class XXCircle

{

    public void displayCircle(){

       System.out.println("通过XXCircle.displayCircle()画圆");

    }

}

 

Adapter模式有两种类型:

1)    对象Adapter模式,它依赖于一个对象(适配器,即Shape对象)包含另一个对象(被适配的对象,即XXCircle对象)

class CircleObject implements Shape

{

    public XXCircle circle;

    public CircleObject(XXCircle xxcircle){

    circle=xxcircle;

    }

    public void display() {

       circle.displayCircle(); 

    }

}

public class Client

{

       public static void main(String[] args)

       {

       XXCircle circle=new XXCircle();

       CircleObject co=new CircleObject(circle);

       co.display();

    }

}

2)     类Adapter模式,它是通过多重继承来实现的(java中没有多继承,是通过接口来实现的)。

class CircleClass extends XXCircle implements Shape

{

    public void display()

   {

       super.displayCircle();  

    }

}

public class Client

{

    public static void main(String[] args)

   {

       CircleClass cc=new CircleClass();

       cc.display();

    }

}

小结:Adapter模式是一个很常用的模式,它将一个(或多个)类的接口转换成我们需要类所具备的一个接口。

它的实现方式是:创建一个具备所需接口的类,然后包装原有类的方法,这样实际上就包含了被适配的对象。

它主要适用于以下几种情况:

1) 你希望使用他人编写的子程序或方法,因为你需要它所执行的功能。

2) 你无法将这个子程序直接加入程序中。

3) 子程序的接口或调用方式与需要使用它的相关对象不完全相同。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值