当前位置:编程学习 > JAVA >>

设计模式-适配器模式(adapter)

设计模式-适配器模式(adapter)
适配器模式定义
         将两个不兼容的类合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adapter(适配器)两个身份。
为何使用适配器模式


       经常碰到要将两个没有关系的类组合在一起使用,第一解决方案是:修改各自类的接口,但是我们没有代码,或者不愿意为一个应用修改各自的接口。那么这种Case下,Adapter可以很好的解决这个问题。使用这两个接口的合体。


如何使用适配器模式


       适配器模式有类的适配器模式和对象的适配器模式两种不同的形式。

 


      对象的适配器模式:

结构图:

 \

上图中Adaptee中没有sampleOperation2()这个方法,然而客户端需要这个方法。为了使Adaptee能够使用这个方法,提供一个中间环节,既Adapter,把Adaptee和Target连接起来。把Adaptee委派给adapter
Target:
[java]
package com.designpatten.adapter.object; 
 
public interface Target { 
 
    void sampleOperation1() ; 
     
    void sampleOperation2() ; 
     

package com.designpatten.adapter.object;

public interface Target {

 void sampleOperation1() ;
 
 void sampleOperation2() ;
 
}
Adaptee:被适配者
[java]
package com.designpatten.adapter.object; 
 
public class Adaptee { 
     
    public void sampleOperation1(){ 
        System.out.println("Adaptee ---> sampleOperation1()"); 
    } 
 

package com.designpatten.adapter.object;

public class Adaptee {
 
 public void sampleOperation1(){
  System.out.println("Adaptee ---> sampleOperation1()");
 }

}
Adapter:适配器
[java]
package com.designpatten.adapter.object; 
 
public class Adapter implements Target { 
 
    private Adaptee adaptee ; 
     
    @Override 
    public void sampleOperation2() { 
        //实现Adaptee需要做的工作  
        System.out.println("object.Adapter-------->sampleOperation2"); 
        adaptee.sampleOperation1() ; 
    } 
 
    @Override 
    public void sampleOperation1() { 
        // TODO Auto-generated method stub  
         
    } 
     
    public void setAdaptee( Adaptee adaptee ){ 
        this.adaptee = adaptee; 
    } 
 

package com.designpatten.adapter.object;

public class Adapter implements Target {

 private Adaptee adaptee ;
 
 @Override
 public void sampleOperation2() {
  //实现Adaptee需要做的工作
  System.out.println("object.Adapter-------->sampleOperation2");
  adaptee.sampleOperation1() ;
 }

 @Override
 public void sampleOperation1() {
  // TODO Auto-generated method stub
  
 }
 
 public void setAdaptee( Adaptee adaptee ){
  this.adaptee = adaptee;
 }

}
Client:
[java]
package com.designpatten.adapter.object; 
 
public class Client { 
    public static void main(String[] args) { 
         
        Adapter adapter = new Adapter() ; 
        adapter.setAdaptee(new Adaptee()) ; 
        adapter.sampleOperation2() ; 
         
    } 

package com.designpatten.adapter.object;

public class Client {
 public static void main(String[] args) {
  
  Adapter adapter = new Adapter() ;
  adapter.setAdaptee(new Adaptee()) ;
  adapter.sampleOperation2() ;
  
 }
}

 

      
类的适配器模式:


结构图:

 \

上图中Adaptee中没有sampleOperation2()这个方法,然而客户端需要这个方法。为了使Adaptee能够使用这个方法,提供一个中间环节,既Adapter,把Adaptee和Target连接起来。Adapter继承Adaptee.
Target:

[java]
package com.designpatten.adapter.classes; 
 
public interface Target { 
 
    void sampleOperation1() ; 
     
    void sampleOperation2() ; 
     

package com.designpatten.adapter.classes;

public interface Target {

 void sampleOperation1() ;
 
 void sampleOperation2() ;
 
}


Adaptee:被适配者

[java]
package com.designpatten.adapter.classes; 
 
public class Adaptee { 
     
    public void sampleOperation1(){ 
        System.out.println("Adaptee ---> sampleOperation1()"); 
    } 
 

package com.designpatten.adapter.classes;

public class Adaptee {
 
 public void sampleOperation1(){
  System.out.println("Adaptee ---> sampleOperation1()");
 }

}


Adapter:适配器

[java]
package com.designpatten.adapter.classes; 
 
public class Adapter extends Adaptee implements Target { 
 
    @Override 
    public void sampleOperation2() { 
        System.out.println("classes.Adapter--------------->sampleOperation2"); 
    } 
 

package com.designpatten.adapter.classes;

public class Adapter extends Adaptee implements Target {

 @Override
 public void sampleOperation2() {
  System.out.println("classes.Adapter--------------->sampleOperation2");
 }

}


Client:
[java]
package com.designpatten.adapter.classes; 
 
public class Client { 
    public static void main(String[] args) { 
         
        Adapter adapter = new Adapter() ; 
        adapter.sampleOperation2() ; 
   &nbs

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,