2011-05-27 37 views
5

Dekoratör modelini uyguladıktan ve bir çift dekoratörü kodladıktan sonra, API'nin bir kullanıcının uyumsuz dekoratörler oluşturmasına izin verdiğini fark ettim. Bu, API tasarımcısının yaşaması gereken modelin doğal bir kısıtlaması mı, yoksa modelimin yanlış bir şekilde uygulanması mı? Örneğin, ikili olarak verileri kodlayan bir ikili dekoratörle veya bir dizede verileri kodlayan bir dize dekoratörüyle dekore edilebilecek bir sınıf olduğunu hayal edin. Bu dize dekoratör kullanıldığında, bir JSON veya XML dekoratör ile daha da dekore edilebilir. Şimdi, JSON dekoratörünü uyguladıktan sonra, XML dekoratörünün üzerine yerleştirilmesinin uyumsuz olacağı ya da ikili dekoratörün kullanılması durumunda XML/JSON dekoratörünün kullanımının olmadığı açıktır. java.io paketini kullanarakBir dekoratör Süsleme

Java örneği:

InputStream is = someInputStream; 
BufferedInputStream bis = new BufferedInputStream(is); 
ObjectInputStream ois = new ObjectInputStream(bis); 
DataInputStream dis = new DataInputStream(ois); 

bu sonucu tanımsız ancak API izin veriyorsa.

+1

Kodlama yöntemine aktarılan bağımsız değişkene veya ayrı yöntem çağırma işlemine bağlı olarak, sınıf herhangi bir biçimde kodlanamaz mı? JSON dekoratörüyle bir sınıfı neden süslemek, XML dekoratörüyle uyumsuz kılıyor? – Eimantas

+0

İyi nokta. Olabilirdi, ama benim durumumda bir programlama yükü olurdu. – yannisf

cevap

1

Dekoratörlerin işlevsellikleri birleştirmesi kolay. Birleşik işlevin bir anlam ifade edip etmediği API kullanıcısına aittir.

0

Bu tür bir kısıtlama zorlaması, bildiğim kadarıyla dekoratör deseninin bir parçası değildir, ancak yapamayacağının bir nedeni yoktur. API'nin basitliği ve güvenlik arasında bir programdır (programcı hatalarından).

1

Java'nın IO sınıfları, Interface Segregation Principle ve Liskov Substitution Principle gibi bir veya daha fazla OO tasarım ilkesini ihlal etme ve uygulama kalıtımını kötüye kullanma durumu gibi görünüyor. ObjectInputStream ve DataInputStream, InputStream'den miras almazsa, yalnızca bunlarda kullanılmasına izin verilen yöntemlere sahip olabilirler. Kodun uygulama yoluyla yeniden kullanımı miras muhtemelen bu soruna neden olmuştur - kalıtım üzerinden kompozisyon lehine kaçınılmış olabilir.

+0

Çok iyi analiz, puan ve bağlantılar! – yannisf

İlgili konular