我有一個關於OOP實現和設計模式的問題。要使用哪種設計模式(如果存在)?
我有一個固定的類模型,我不能改變(因爲它是每次應用程序啓動時自動生成的)。在這裏有很多類和類似的字段,如下面的例子:你可以看到字段city
和streets
包含在兩個類中。
public class A{
String city;
String street;
String name;
....//get methods
}
public class B{
String city;
String street;
String age;
....//get methods
}
我需要提取地址形成兩種類型的課程,我想用一個方法來實現它(因爲它似乎是愚蠢的,兩次寫相同的代碼)。如果班級模型是可變的,我可以添加一個新的界面Addressable
,其中A
和B
可以實現。
public interface Addressable{
public String getStreet();
public String getCity();
}
//somewhere in code
public Address getAddress(Addressable addressable){
return new Address(addressable.getCity(), addressable.getStreet());
}
什麼是最優雅的方式來實現相同的沒有接口,並沒有編碼相同的不同的類?
目前尚不清楚在A和B中你實際可以改變什麼。 – davidxxx
沒有優雅的方法,你可以嘗試轉換到合適的類,或者使用反射(對於這種需要可能太重)。 –
如果這些類不能被改變(如果它們是可能被生成的),並且你不能爲那些實現了一個通用接口的類生成包裝器/裝飾器,否則我會看到的唯一方法就是反射。但在走下這條路線之前,我會認真思考如果沒有反思,可以做些什麼。生成(或至少填充)這些包裝的一種方法可能是[mapstruct](http://mapstruct.org/)。 – Thomas