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

2014-11-24 11:33:14 · 作者: · 浏览: 13

设计模式-适配器模式(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 {

publ