具有继承性的生成器模式
我想将 Web 服务 URL 请求表示为对象,并发现在继承层次结构中有很多常见的参数可以“冒泡”。一个请求可以有很多参数,一些是强制性的,有些是可选的,为此,我相信Bloch的Builder模式是一个不错的选择,它用流畅的界面模拟命名参数。
具体来说,我正在为Google Maps Web Service API进行设计,该API具有一般的Web服务请求。
http://maps.googleapis.com/maps/api/service/output?{parameters}
service
并且是必需参数,并且是必需参数。还有一个可选参数 。output
sensor
language
每个服务都有其一组必需参数和可选参数。地理编码服务具有两个可选参数和 。它还具有相互排斥的必需参数,或 指定服务类型(分别为直接或反向地理编码)。我代表了这种与新儿童班的相互排斥。bounds
region
address
location
我想象类层次结构是这样的:
.-----.
| Url |
'-----'
^
|
.---------.
| Request |
'---------'
^
|----------------------------+--------------...
.---------. .------------.
| Geocode | | Directions |
'---------' '------------'
^ ^
|------------+ .
.--------. .---------. .
| Direct | | Reverse | .
'--------' '---------'
然后,我想做如下操作:
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();
如何创建使用插入它的类和超类中的参数和方法的生成器?