Tôi muốn đại diện cho yêu cầu URL dịch vụ web dưới dạng đối tượng và nhận thấy có rất nhiều tham số phổ biến có thể được "phát tán" trong hệ thống phân cấp thừa kế. Một yêu cầu có thể có nhiều tham số, một số tham số bắt buộc và tùy chọn khác, mà tôi tin rằng mẫu Builder của Bloch là một tùy chọn tốt, mô phỏng các đối số được đặt tên bằng giao diện thông thạo.Mô hình trình xây dựng có thừa kế
Cụ thể, tôi đang thiết kế cho Google Maps API dịch vụ web, mà đã là yêu cầu dịch vụ web chung
http://maps.googleapis.com/maps/api/service/output?{parameters}
service
và output
là đối số bắt buộc, và sensor
một tham số bắt buộc. Ngoài ra còn có một tham số tùy chọn language
.
Mỗi dịch vụ có bộ thông số bắt buộc và tùy chọn. Dịch vụ mã địa lý có hai tham số tùy chọn, bounds
và region
. Nó cũng có các thông số bắt buộc loại trừ lẫn nhau, address
hoặc location
, chỉ định loại dịch vụ (mã hóa địa lý trực tiếp hoặc ngược lại). Tôi đại diện cho loại trừ lẫn nhau này với các lớp trẻ em mới.
Tôi tưởng tượng hệ thống phân cấp lớp như vậy:
.-----.
| Url |
'-----'
^
|
.---------.
| Request |
'---------'
^
|----------------------------+--------------...
.---------. .------------.
| Geocode | | Directions |
'---------' '------------'
^ ^
|------------+ .
.--------. .---------. .
| Direct | | Reverse | .
'--------' '---------'
Sau đó, tôi muốn làm một cái gì đó như sau:
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();
Làm thế nào tôi có thể tạo ra một Builder sử dụng lập luận và phương pháp từ lớp và siêu lớp mà nó được chèn vào?
Việc thực hiện ghi đè 'getThis()' trong các lớp cụ thể không được trừu tượng. – Eric
@EricTobias Bạn nói đúng, nguy cơ sao chép-dán. Đã sửa. –
Điều này thật tuyệt vời! Chính xác những gì tôi đang tìm kiếm! – Maddy