2012-10-14 23 views
9

Komut tasarım deseninde Invoker sınıfı isteğe bağlı mı? Müşteri, komut için Beton Komuta ve Alıcısını başlatmalıdır. İstemcinin her zaman Invoker'ı başlatması ve komut nesnesini Invoker nesnesine iletmesi gerekir. Daha sonra istemci komutu çalıştırması gerektiğinde, istemci sadece Invoker nesnesini ve Invoker komutunu ister (belki hemen veya daha sonra yürütme için komutu kuyruğa alabilir).Komut Tasarım Kalıbı - Invoker İsteğe Bağlı mı?

Veya başka bir yol bu mu? İstemcinin komutu eşzamanlı olarak gerçekleştirmesi gerekiyorsa, istemci, temel sınıf arabirimini kullanarak komutu referans alır, ancak beton komutunu ve alıcısını başlatır. İstemcinin komutu yerine getirmesi gerektiğinde, istemci temel sınıf komut değişkeninde yürütme yöntemini çağırır mı? Bir komutun çalıştırılması gerektiğinde bazı ek mantığa ihtiyaç duyulduğunda, Invoker sınıfı ek mantığı ve istemcinin komutu gerçekleştirmek için Invoker nesnesiyle etkileşime girmesini sağlamak için kullanılacaktır.

cevap

6

Komut şablonunun amacı genellikle 1) Aynı kod tarafından işlenebilmeleri için aynı türdeki farklı işlemlerin bir kümesini paylaşırlar. 2) operasyonun başlatılmasından ayrı işlem sıralaması/oluşturma. Reciever, amaç 2 için açıkça gereklidir.

Yarattıktan hemen sonra çağırırsanız veya Reciever invoker rolünü oynarsa, tekil, tek başına çalışan bir kişi yoktur. Bu, hiçbir invoker olmadığı anlamına geldiği anlamına gelir.

Şunlara şu şekilde bakın: Oluşturma, zamanlama ve devreye alma/ayırma/ayırma. Bu, onları üç ayrı sınıf olarak uygulamanız gerektiği anlamına gelmez. Sadece Komut düzeni yaşam döngüsünde yer alan mantıksal roller.

DÜZENLEME: Sanırım tek sorumluluk ilkesi onları ayırmanız gerektiğini savunuyor, ancak yorumcu gibi bir şey var :) Yerel koşullar gözlenebilir ve gözlemlenmelidir.

1

Bildiğimiz gibi, java.lang.Runnable, Thread sınıfının bir invoker olarak çalıştığı komut deseninin örneklerinden biridir. Runnable sınıfının nesnesini Thread sınıfına geçiririz ve start/run diyoruz.

Ancak hiçbir zaman ana iş parçacığını başlatabilecek bir istemci sınıfı oluşturmuyoruz.

Bu yüzden bir kullanıcı isteğe bağlı değildir, ancak istemciye sıkıca bağlı değildir. Böylece komut modelinin UML'si, istemci sınıfı ve invoker sınıfı arasında hiçbir ilişki göstermez.

Başka bir answer bu soru ile ilgili.