2010-02-06 20 views
14

Bir uygulamanın tasarım aşamasındayım ve geri/yineleme amacıyla command pattern'u kullanmak istiyorum. Komut modelinde biraz araştırma yaptım ama elde edemediğim tek şey: Bir komutun geri al ve yineleme yöntemlerine sahip olması ya da iki ayrı komut alması gerekirse, biri geri almak için ve bir tanesi yinelemeli olmak için. ana komut kendini?Komut şablonunun uygulanması

cevap

11

Komut nesnesinin kendisi geri alma/yineleme işlevini uygulamalıdır. Komutlar genellikle çok seviyeli geri almayı uygulamak için bir komut yöneticisi tarafından tutulan bir yığından itilir ve atılırlar. Komutlar yürütüldüğünde, yığına itilirler ve geri alındıklarında yığıntan atılırlar.

Memento deseni komut deseni ile birlikte kullanılacaktır, komut modelinin kullanılmasının yerine geçmez. Geri alma işlemi için gereken durumu korumak için kullanılır.

+1

Bunu daha iyi bir çözüm sadece basit bir yığın değil eklemek istiyorum. Bunun yerine, geçerli öğeye bir liste ve başvuru istersiniz. Geri alma, referansı geri döndürür ve * yeniden imleme * ileriye doğru yürür. Yığını kullanmak yeniden yapmanıza izin vermez. – munificent

+1

2 yığınları kullandım, yığını geri aldım. Bir eylemi geri alırsanız, geri alma yığından çıkar ve yineleme yığınının üzerine iter. Yeni bir eylem eklemek, geri alma yığınının üstüne yenisini itmek ve yineleme yığınının temizlenmesidir. – Wout

2

Bunun için memento şablonunu da düşünmek isteyebilirsiniz, onu kullanırız ve geri almak için mükemmel çalışır.

+0

Memento deseni, sadece geri almak için istediğimde komut desenini uygulamak için daha az zaman harcar mı? – slayerIQ

+0

@slayerIQ Memento kalıbı komut deseni ile birlikte kullanılacak, komut deseninin kullanımı yerine geçmez. – David

+0

Yani memento geri alma işlemlerini yapar ve yığınları tekrarlar, Ve yığınlar komutları içerecektir doğru muyum? – slayerIQ