ztp zadanie 2
unknown
plain_text
3 years ago
5.5 kB
4
Indexable
20% - Napisz klasę reprezentującą kolejkę napisów. Będziemy ją traktować jak prosty serwer pocztowy, na który możemy wrzucać tekstowe wiadomości, a następnie je pobierać (w kolejności przychodzenia). Możesz wykorzystać klasę LinkedList. 20% - Stwórz klasę Dekoratora do tej kolejki. Będzie on (abstrakcyjną) klasą bazową dla kolejnych dekoratorów i sam w sobie nic nie robi. Następnie zdefiniuj dekoratory uzupełniające funkcjonalność kolejki o: 5% - dopisywanie czasu i daty wysłania wiadomości (w postaci doklejonego tekstu "wysłano ..."), 5% - dopisywanie czasu i daty odebrania wiadomości (w postaci doklejonego tekstu "odebrano ..."), 10% - numerowania wiadomości (każda wiadomość powinna otrzymać swój unikalny numer, dodawany do treści wiadomości), 10% - filtrowanie wiadomości (filtr powinien blokować wiadomości zawierające wskazany (w konstruktorze) ciąg znaków, np. "sale"), 10% - cenzurowanie wiadomości (wskazany ciąg znaków powinien być zamieniany na "***"), 20% - szyfrowanie danych (jakimś prostym algorytmem). W programie testowym wypróbuj różnych kombinacji dekoratorów oraz łączenia kilku dekoratorów tej samej klasy (np. połącz kilka filtrów, każdy po innym słowie). using System; using System.Collections.Generic; abstract class QueueDecorator { protected Queue queue; public abstract void Put(string item); public abstract string Get(); public int Count { get { return queue.Count; } } } class TimestampSenderDecorator : QueueDecorator { public TimestampSenderDecorator(Queue queue) { this.queue = queue; } public override void Put(string item) { queue.Enqueue(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " wysłano: " + item); } public override string Get() { return queue.Dequeue(); } } class TimestampReceiverDecorator : QueueDecorator { public TimestampReceiverDecorator(Queue queue) { this.queue = queue; } public override void Put(string item) { queue.Enqueue(item); } public override string Get() { return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " odebrano: " + queue.Dequeue(); } } class NumberedMessagesDecorator : QueueDecorator { private int counter; public NumberedMessagesDecorator(Queue queue) { this.queue = queue; counter = 0; } public override void Put(string item) { counter++; queue.Enqueue(counter + ". " + item); } public override string Get() { return queue.Dequeue(); } } class FilteringDecorator : QueueDecorator { private string filterString; public FilteringDecorator(Queue queue, string filterString) { this.queue = queue; this.filterString = filterString; } public override void Put(string item) { if (!item.Contains(filterString)) { queue.Enqueue(item); } } public override string Get() { return queue.Dequeue(); } } class CensorshipDecorator : QueueDecorator { private string censorString; public CensorshipDecorator(Queue queue, string censorString) { this.queue = queue; this.censorString = censorString; } public override void Put(string item) { queue.Enqueue(item.Replace(censorString, "***")); } public override string Get() { return queue.Dequeue(); } } class EncryptionDecorator : QueueDecorator { private int[] key; public EncryptionDecorator(Queue queue, int[] key) { this.key = key; } public override void Put(string item) { string encryptedItem = ""; for (int i = 0; i < item.Length; i++) { encryptedItem += (char)(item[i] + key[i % key.Length]); } queue.Enqueue(encryptedItem); } public override string Get() { string item = queue.Dequeue(); string decryptedItem = ""; for (int i = 0; i < item.Length; i++) { decryptedItem += (char)(item[i] - key[i % key.Length]); } return decryptedItem; } } class Queue { private List<string> items; public Queue() { items = new List<string>(); } public void Enqueue(string item) { items.Add(item); } public string Dequeue() { string item = items[0]; items.RemoveAt(0); return item; } public int Count { get { return items.Count; } } } class Program { static void Main(string[] args) { Random random = new Random(); Queue queue = new Queue(); queue = new TimestampSenderDecorator(queue); queue = new TimestampReceiverDecorator(queue); queue = new NumberedMessagesDecorator(queue); queue = new FilteringDecorator(queue, "test"); queue = new CensorshipDecorator(queue, "badword"); queue = new EncryptionDecorator(queue, new int[] { 3, 5, 2 }); queue.Put("hello"); queue.Put("world"); queue.Put("test"); queue.Put("this is a badword"); while (queue.Count > 0) { Console.WriteLine(queue.Dequeue()); } } }
Editor is loading...