Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharpNotesForProfessionals.pdf
Скачиваний:
57
Добавлен:
20.05.2023
Размер:
6.12 Mб
Скачать

Chapter 135: Implementing Decorator Design Pattern

Section 135.1: Simulating cafeteria

Decorator is one of structural design patterns. It is used to add, remove or change behaviour of object. This document will teach you how to use Decorator DP properly.

Let me explain the idea of it to you on a simple example. Imagine you're now in Starbobs, famous co ee company. You can place an order for any co ee you want - with cream and sugar, with cream and topping and much more combinations! But, the base of all drinks is co ee - dark, bitter drink, you can modify. Let's write a simple program that simulates co ee machine.

First, we need to create and abstract class that describes our base drink:

public abstract class AbstractCoffee

{

protected AbstractCoffee k = null;

public AbstractCoffee(AbstractCoffee k)

{

this.k = k;

}

public abstract string ShowCoffee();

}

Now, let's create some extras, like sugar, milk and topping. Created classes must implement AbstractCoffee - they will decorate it:

public class Milk : AbstractCoffee

{

public Milk(AbstractCoffee c) : base(c) { } public override string ShowCoffee()

{

if (k != null)

return k.ShowCoffee() + " with Milk"; else return "Milk";

}

}

public class Sugar : AbstractCoffee

{

public Sugar(AbstractCoffee c) : base(c) { }

public override string ShowCoffee()

{

if (k != null) return k.ShowCoffee() + " with Sugar"; else return "Sugar";

}

}

public class Topping : AbstractCoffee

{

public Topping(AbstractCoffee c) : base(c) { }

public override string ShowCoffee()

{

if (k != null) return k.ShowCoffee() + " with Topping";

GoalKicker.com – C# Notes for Professionals

676

else return "Topping";

}

}

Now we can create our favourite co ee:

public class Program

{

public static void Main(string[] args)

{

AbstractCoffee coffee = null; //we cant create instance of abstract class coffee = new Topping(coffee); //passing null

coffee = new Sugar(coffee); //passing topping instance coffee = new Milk(coffee); //passing sugar Console.WriteLine("Coffee with " + coffee.ShowCoffee());

}

}

Running the code will produce the following output:

Co ee with Topping with Sugar with Milk

GoalKicker.com – C# Notes for Professionals

677