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