Patrón de diseño de adaptador
¿Cómo se utiliza el patrón de diseño del adaptador en la plataforma Eclipse? Eclipse Platform Runtime tiene un buen ejemplo de este patrón.
En primer lugar, el patrón de diseño del adaptador tiene una idea simple detrás: envolver el objeto y hacerlo compatible con otra interfaz que esperan los clientes. Puedes echar un vistazo a la idea de adaptador más simple en mi publicación anterior.
La forma en que se utilizan los adaptadores en eclipse es ligeramente diferente y más compleja. En el siguiente ejemplo, las clases y las interfaces se colocan en un archivo por motivos de simplicidad.
La jerarquía de clases se muestra en el diagrama siguiente.
Cuando queremos pasar de naranjas a manzanas, el adaptador entra en su lugar. El siguiente código muestra lo que hace, ningún flujo de trabajo complejo de Eclipse.
interface IAdaptable{ public Object getAdapter(Class adapter); } interface IApple extends IAdaptable{ } interface IOrange{ } class Orange implements IOrange{ } interface IPear{ } class Pear implements IPear{ } public class Apple implements IApple{ @Override public Object getAdapter(Class adapter) { //the real story should be forwarding the request to the platform to get adapter return PlatformAdapterManager.getAdapter(this, adapter); } } class PlatformAdapterManager{ public static Object getAdapter(Object o, Class adapter){ if(adapter == IOrange.class){ if(o instanceof Apple){ return new Orange(); //Read code use an adapter to wrap the apple object and return an adapter object which implements IApple interface } }else if(adapter == IPear.class){ if(o instanceof Apple){ return new Pear(); } } return null; //return null when the class does not implement the interface. } } |
La clase PlatformAdapterManager está totalmente inventada, la historia real en eclipse es que la plataforma obtiene el administrador del adaptador para devolver un adaptador adecuado.
public class Main { public static void main(String args[]){ IApple apple = new Apple(); IOrange orange = (IOrange)apple.getAdapter(IOrange.class); if(orange == null){ System.out.println("null"); }else{ System.out.println(orange); } IPear pear = (IPear)apple.getAdapter(IPear.class); if(pear == null){ System.out.println("null"); }else{ System.out.println(pear); } } } |
Producción:
[email protected]
[email protected]
Este es el enfoque de implementar el método getAdapter () en la propia clase. Este enfoque no requiere registro con la clase, ya que la implementación está en el método getAdapter ().
De otra manera que se usa en Eclipse, no se requieren cambios de código en la clase, el método getAdapter es aportado por una fábrica. Echa un vistazo a esta publicación para ver la historia real.
Referencias: