نحوه پیاده سازی عملیات Undo و Redo با استفاده از الگوی طراحی Command
نویسنده: وحید فرهمندیان
تاریخ: ۱۳۹۳/۱۱/۲۹ ۱۹:۲۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public class Client
{
public delegate string Invoker();
public static Invoker Execute;//اضافه کردن یک آیتم جدید
public static Invoker Redo;//حرکت به جلو
public static Invoker Undo;//حرکت به عقب
} public class Command
{
public Command(Receiver receiver)
{
Client.Execute = receiver.Action;
Client.Redo = receiver.Foreward;
Client.Undo = receiver.Reverse;
}
} public class Receiver
{
private readonly List<string> build = new List<string>();
private readonly List<string> oldBuild = new List<string>();
public string Action()
{
if (build.Count > 0)
oldBuild.Add(build.LastOrDefault());
build.Add(build.Count.ToString(CultureInfo.InvariantCulture));
return build.LastOrDefault();
}
public string Reverse()
{
string last = oldBuild.LastOrDefault();
if (last == null)
return "EMPTY";
oldBuild.Remove(last);
return last;
}
public string Foreward()
{
string oldIndex = oldBuild.LastOrDefault();
int index = oldIndex == null ? -1 : build.IndexOf(oldIndex);
if ((index + 1) == build.Count)
return "END";
oldBuild.Add(build.ElementAt(index + 1));
return oldBuild.LastOrDefault();
}
} new Command(new Receiver());
Console.WriteLine(Client.Execute());
Console.WriteLine(Client.Execute());
Console.WriteLine(Client.Undo());
Console.WriteLine(Client.Undo());
Console.WriteLine(Client.Undo());
Console.WriteLine(Client.Redo());
Console.WriteLine(Client.Redo());
Console.WriteLine(Client.Redo());
Console.WriteLine(Client.Execute());