GoogleWeather adında bir dersim var, bunu başka bir sınıfa CustomWeather olarak dönüştürmek istiyorum.Sınıfı başka bir dile dönüştürmek için tasarım deseni
Sınıfları dönüştürmenize yardımcı olan herhangi bir desen var mı?
GoogleWeather adında bir dersim var, bunu başka bir sınıfa CustomWeather olarak dönüştürmek istiyorum.Sınıfı başka bir dile dönüştürmek için tasarım deseni
Sınıfları dönüştürmenize yardımcı olan herhangi bir desen var mı?
yapmak için bir kritik karar yok:
kaynak nesnesine gelecek değişiklikleri yansıtacak şekilde dönüştürülmesi ile oluşturulduğu nesne gerekir mi?
Böyle bir işleve ihtiyacınız yoksa, en basit yaklaşım, diğer yanıtlarda belirtildiği gibi kaynak nesnenin alanlarına dayalı yeni bir nesne oluşturan statik yöntemlerle bir yardımcı program sınıfı kullanmaktır.
public class GoogleWeather {
...
public int getTemperatureCelcius() {
...
}
...
}
public interface CustomWeather {
...
public int getTemperatureKelvin();
...
}
public class GoogleWeatherAdapter implements CustomWeather {
private GoogleWeather weather;
...
public int getTemperatureKelvin() {
return this.weather.getTemperatureCelcius + 273;
}
...
}
kullanarak yapma) adaptör ve mapper appproche arasındaki farkın ne anlama geldiğini anlamadım. Bu durumda adaptör modeli? – user1549004
@ user1549004: Bağdaştırıcı bir sarıcıdır - tüm yöntemler kaynak nesneye iletilir. Bu, kaynak nesneye yapılan tüm güncellemelerin adaptör aracılığıyla yayıldığı anlamına gelir. Öte yandan, bir eşleme sınıfı kullanmak tek seferlik bir şeydir - kaynağa yapılan tüm güncellemeler genellikle dönüşümün sonucunu etkilemez. – thkala
kaynağında yapılan herhangi bir güncellemenin, dönüşümün sonucunu etkilememesi durumunda, bir mapper sınıfı kullanırken bana bir örnek verebilir misiniz? – user1549004
Bu durumda ben statik yöntemlerin bir grup ile bir Mapper sınıfını kullanırsınız:
public final class Mapper {
public static GoogleWeather from(CustomWeather customWeather) {
GoogleWeather weather = new GoogleWeather();
// set the properties based on customWeather
return weather;
}
public static CustomWeather from(GoogleWeather googleWeather) {
CustomWeather weather = new CustomWeather();
// set the properties based on googleWeather
return weather;
}
}
Yani sınıflar arasındaki bağımlılıkları yoktur.
Örnek kullanım:
CustomWeather weather = Mapper.from(getGoogleWeather());
arasında "CustomWeather" sınıfındaki – user1549004
Nedeni, bu ** en iyi yaklaşımdır **! (sadece şaka, ama hey, burada kötü çözümler önermem) –
Dikkat edilmesi gereken bir şey: bu bir defalık dönüşümdür; Kaynak nesnedeki gelecekteki değişiklikler, ortaya çıkan nesnenin alanlarını etkilemez. – thkala
yanında Ayrıca yeni Java8 kullanabilirsiniz: Eğer kaynak nesnesine değişiklikleri yansıtacak şekilde dönüştürülen nesne gerekiyorsa Öte yandan
, muhtemelen Adapter design pattern çizgisinde bir şey gerekir java.util.function 'dan' İşlev 'özelliği.Daha ayrıntılı açıklama http://www.leveluplunch.com/java/tutorials/016-transform-object-class-into-another-type-java8/ adresinde verilmektedir. Lütfen bir göz var!
Bu sadece basit bir tek yönlü dönüştürücüdür - geçerli ancak bunu herhangi bir Java sürümünde tam olarak aynı şekilde uygulayabilirsiniz. –
Dekoratör kalıbı? – assylias
Hiyerarşiniz nedir (CustomWeather, GoogleWeather'ı genişletir)? "Dönüştürme" ile ne demek istiyorsun? – Flawyte
Nasıl dönüştürülür? Bir alt sınıf oluşturmak, yeniden adlandırmak, vb? GoogleWeather ve CustomWeather – russ36363