java设计模式之适配器模式(Adapter)

适配器模式定义:

将两个不兼容的类纠合在一起使用,属于结构型模式,需要有 Adaptee(被适配者)和 Adaptor(适配器)两个身份。

将一个类的接口转换成另外一个接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作。

系统的数据和行为都正确,但是接口不符合,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。


假设我们要打桩,有两种类:方形桩 圆形桩.

public class SquarePeg{
 public void insert(String str){
System.out.println("SquarePeg insert():"+str);
 }
}
public class RoundPeg{
 public void insertIntohole(String msg){
 System.out.println("RoundPeg insertIntoHole():"+msg);
}
}

现在有一个应用,需要既打方形桩,又打圆形桩.那么我们需要将这两个没有关系的类综合应用。假设 RoundPeg 我们没有源代码,或源代码我们不想修改,那么我们使用 Adapter 来实现这个应用:

public class PegAdapter extends SquarePeg{
 private RoundPeg roundPeg;
 public PegAdapter(RoundPeg peg)(this.roundPeg=peg;)
 public void insert(String str){ roundPeg.insertIntoHole(str);}
}

在上面代码中,RoundPeg 属于 Adaptee,是被适配者。PegAdapter 是 Adapter,将 Adaptee(被适配者 RoundPeg)和Target(目标 SquarePeg)进行适配。实际上这是将组合方法(composition)和继承(inheritance)方法综合运用

上面的 PegAdapter 是继承了 SquarePeg,如果我们需要两边继承,即继承 SquarePeg 又继承 RoundPeg,因为 Java 中不允许多继承,但是我们可以实现(implements)两个接口(interface)

public interface IRoundPeg{
 public void insertIntoHole(String msg);
}
public interface ISquarePeg{
 public void insert(String str);
}
下面是新的 RoundPeg 和 SquarePeg, 除了实现接口这一区别,和上面的没什么区别。
public class SquarePeg implements ISquarePeg{
 public void insert(String str){
 System.out.println("SquarePeg insert():"+str);
 }
}
public class RoundPeg implements IRoundPeg{
 public void insertIntohole(String msg){
 System.out.println("RoundPeg insertIntoHole():"+msg);
 }
}
下面是新的 PegAdapter,叫做 two-way adapter:
public class PegAdapter implements IRoundPeg,ISquarePeg{
 private RoundPeg roundPeg;
private SquarePeg squarePeg;
 // 构造方法
 public PegAdapter(RoundPeg peg){this.roundPeg=peg;}
 // 构造方法
 public PegAdapter(SquarePeg peg)(this.squarePeg=peg;)
 public void insert(String str){ roundPeg.insertIntoHole(str);}
}
在双方都不太容易修改的时候在使用适配器模式适配。





猜你喜欢

转载自blog.csdn.net/s505592562/article/details/80935727