Adapter pattern

1.Adapter 对象适配(Object)

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

 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,然后使用new的组合生成对象方式,生成RoundPeg的对象roundPeg,再重载父类insert()方法。从这里,你也了解使用new生成对象和使用extends继承生成对象的不同,前者无需对原来的类修改,甚至无需要知道其内部结构和源代码.

2.Adapter 类适配(Class)
use interface to meet customer requirement based on existing class
//Customer reuqire method/interface
public interface SquarePeg{
  public void insert(String str);
}

//Existing method/class
public class RoundPeg{
public void insertIntohole(String msg){
System.out.println("RoundPeg insertIntoHole():"+msg);
   }
}

//Adapter:
public class PegAdapter extends RoundPeg implements SquarePeg{

     public void insert(String str){ 
          insertIntoHole(str);
    
}
}

Customer call the adapter: PegAdapter, and the adaptee:RoundPeg be called by adapter.

你可能感兴趣的:(Adapter Pattern)