适配器(Adapter)模式

来源:互联网 发布:小樱和知世 编辑:程序博客网 时间:2024/05/21 08:52

        客户端就是需要调用我们代码的对象。通常,在代码已经存在的情况下编写客户端代码,开发人员可以采取模拟客户端的方法调用我们提供的接口对象。然而,客户端代码也可能与你的代码单独进行开发。例如,设计的火箭方针程序会使用你所提供的火箭信息,但是对于火箭应该拥有怎样的行为,仿真器也会拥有自己的定义。在这样的情况下,会发现现有的类虽然提供了客户端需要的服务,却被定义为不同的方法名。这事,我们就需要运用适配器模式。
    适配器模式的意图在于,使用不同接口的类所提供的服务为客户端提供它所期望的接口。
    当我们需要适配现有代码时,可能会发现客户端开发人员已经事先考虑到这种情形。开发人员为客户端使用的服务提供了接口,如图所示。RequiredInterface接口声明了client类所要调用的requiredMethod()方法。在ExistingClass类中,则定义了usefulMethod()方法,它是client类需要的实现。若要对ExistingClass类进行适配,满足客户端对象的需要,就可以编写一个继承自ExistingClass,并同时实现RequiredInterface接口的类,通过重写requiredMethod()方法将客户端的请求委派给usefulMethod()方法。

                                  
    图中的NewClass类就是适配器模式的一个例子。该类的实例同时也是RequiredInterface的实例。换言之,NewClass类满足了客户端的要求。
    当客户端在接口中定义了它所期待的行为时,就可以运用适配器模式,提供一个实现该接口的类,并同时令其成为现有类的接口。倘若没有定义客户端期待的接口,也可以运用适配器模式,但必须使用”对象适配器“。
    上面的设计属于类的适配器,通过子类进行适配。在类的适配器中,新的适配器类实现了需要的接口,并继承自现有的类。当你需要适配的一组方法并非被定义在接口中时,这种方式就不奏效了。此时就可以创建一个对象适配器,它使用了委派而非继承。下面展示了这样的设计。

                                                          

    通过继承你所需要的类,可以创建一个对象适配器,利用现有类的实例对象,满足所需要方法。
    上面的NewClass类是适配器的一个例子。该类的实例同时也是RequiredClass类的实例。换言之,NewClass类满足了客户端的需要。NewClass类通过使用ExitingClass实例对象,可以将ExistingClass类适配为符合客户端的需要。

0 0
原创粉丝点击