Quiero representar una solicitud de URL de servicio web como un objeto, y encontré que hay muchos parámetros comunes que podrían "borrarse" en una jerarquía de herencia. Una solicitud podría tener muchos parámetros, algunos obligatorios y otros opcionales, para los que creo que el patrón de Bloch's Builder es una buena opción, emulando argumentos con nombre con una interfaz fluida.Patrón de generador con herencia
Específicamente, estoy diseñando para la API del servicio web de Google Maps, que tiene como solicitud de servicio web general
http://maps.googleapis.com/maps/api/service/output?{parameters}
service
y output
son argumentos obligatorios y sensor
un parámetro obligatorio. También hay un parámetro opcional language
.
Cada servicio tiene su conjunto de parámetros obligatorios y opcionales. El servicio Geocode tiene dos parámetros opcionales, bounds
y region
. También tiene parámetros obligatorios mutuamente excluyentes, address
o location
, que especifican el tipo de servicio (geocodificación directa o inversa, respectivamente). Represento esta exclusión mutua con nuevas clases para niños.
me imagino la jerarquía de clases como tal:
.-----.
| Url |
'-----'
^
|
.---------.
| Request |
'---------'
^
|----------------------------+--------------...
.---------. .------------.
| Geocode | | Directions |
'---------' '------------'
^ ^
|------------+ .
.--------. .---------. .
| Direct | | Reverse | .
'--------' '---------'
Entonces, me gustaría hacer algo como lo siguiente:
String output = "xml";
boolean sensor = true;
String address = "Av. Paulista, São Paulo, Brasil";
Bounds bounds = new Bounds(-20, -10, -25, -20); //Geographic rectangle
String region = "br";
String lang = "pt-BR";
Coord location = new Coord(-12,-22);
DirectGeocodeRequestUrl direct =
new DirectGeocodeRequestUrl.Builder(output, sensor, address)
.bounds(bounds)
.language(lang)
.build();
ReverseGeocodeRequestUrl reverse =
new ReverseGeocodeRequestUrl.Builder(output, sensor, location)
.language(lang)
.region(region)
.build();
¿Cómo puedo crear un constructor que utiliza argumentos y métodos de la clase y las superclases en las que se inserta?
La implementación anulada de 'getThis()' en las clases concretas no debe ser abstracta. – Eric
@EricTobias Tienes razón, un peligro de copiar y pegar. Fijo. –
¡Esto es asombroso! ¡Exactamente lo que estaba buscando! – Maddy