2012-03-21 9 views
7

Estoy intentando escribir mi primera biblioteca, pero sigo teniendo algunos problemas de diseño.Librerías de escritura en Java

Mi biblioteca espera mucha configuración para la que he creado interfaces y clases predeterminadas Impl, pero ahora mi biblioteca requiere mucha interacción con la llamada externa. Esto también se realiza a través de interfaces, pero tengo la sensación de que el usuario se ve obligado a anular demasiados métodos que simplemente devuelven alguna falla predeterminada o incluso null. ¿Hay alguna manera más agradable de hacer que todas estas partes "puedes pero no tienes que implementar" más opcional?

Respuesta

10

Incluso si crea una interfaz, a menudo también tiene sentido crear una clase base abstracta que los usuarios de su biblioteca pueden ampliar para implementar la interfaz.

La clase base abstracta puede proporcionar implementaciones predeterminadas de métodos para que el usuario de su biblioteca no tenga que crearlas. También puede definir métodos abstractos que el usuario de API debe implementar si desean crear una subclase concreta.

public abstract class MyBaseClass implements MyInterface { 
    // abstract method 
    // anyone who extends must implement this  
    public abstract void myMethod1(); 

    // default error implementation 
    // overriding is optional, but if used it will throw an error 
    public void myMethod2() { 
     throw new UnsupportedOperationException(); 
    } 

    // default implementation that subclasses may find useful: 
    public void doBothMethods() { 
     myMethod1(); 
     myMethod2(); 
    } 
} 
+3

Para obtener buenos ejemplos de esto, consulte ['java.util.AbstractCollection'] (http://docs.oracle.com/javase/6/docs/api/java/util/AbstractCollection.html) y su subclases. – Taymon

2

Este es ciertamente un área donde no ha habido un enfoque ideal. Ha sido reconocido como tal y ha sido tratado usando public defender methods. El enlace lo llevará a una propuesta de mejora del idioma (oficial).

Así que le recomiendo que se adhiera a las interfaces y proporcione implementaciones predeterminadas de cada método usando métodos de biblioteca estática. De esa manera, estás preparado cuando la bondad del método de defensa de jummy esté disponible.

Cuestiones relacionadas