Сказки о Design Patterns. Decorator.

Aug 26, 2012 21:41

Но толстый хорёк не был бы таким соросом если бы не придумал, как из каждого своего работника выжать вдвое-втрое больше, чем он может дать.
Вот представьте себе - берет он работника на работу и говорит ему

-«Ты по работе должен будешь копать».

-«Ну, ладно» - говорит работник - «почему бы и нет». И начинает копать. Но не тут-то было. Приносит ему толстый хорек форменную одежду уборщика, декорирует в неё и говорит

-«А теперь, после того, как вскопаешь, ты должен будешь всё тут убрать.»

-«Как же так» - удивляется работник - «вы же сами говорили, что я должен только уметь копать?»

-«Э, нет» - отвечает сорос-хорёк - «копать ты конечно должен уметь, но раз я тебя в форму уборщика задекорировал, ты теперь и убирать будешь...»

Вот такие вот пирожки, с котятами...



Decorator module:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DesignPatterns
{
//Для теста на консоли
//class MainApp
//{
// static void Main()
// {
// // Create ConcreteComponent and two Decorators
// ConcreteWorker c = new ConcreteWorker();
// BuryWorkerDecorator d1 = new BuryWorkerDecorator();
// CleanerWorkerDecorator d2 = new CleanerWorkerDecorator();

// // Link decorators
// d1.SetComponent(c);
// d2.SetComponent(d1);

// d2.Operation();

// // Wait for user
// Console.Read();
// }
//}

//Компонент
abstract class WorkerAbstraction
{
public abstract string TalkToMe();
public abstract void DoWork();
}

//Имплементация работника
class ConcreteWorker : WorkerAbstraction
{
public override string TalkToMe()
{
return "Yes?";
}

public override void DoWork()
{
Dig();
}

private string Dig()
{
return "Копаю я, копаю, сколько же можно-то!?";
}
}

// "Decorator"
abstract class Decorator : WorkerAbstraction
{
protected WorkerAbstraction _worker;

public void SetComponent(WorkerAbstraction worker)
{
this._worker = worker;
}

public override string TalkToMe()
{
return "Yes? What can I help you?";
}

public override void DoWork()
{
if (null!=_worker)
{
_worker.DoWork();
}
}
}

//А здесь он закапывает
class BuryWorkerDecorator : Decorator
{
public override void DoWork()
{
base.DoWork();
Bury();
}

private string Bury()
{
return "Копай-закапывай, копай-закапывай, охренели вы там все что ли!?";
}
}

//А здесь полы моет
class CleanerWorkerDecorator : Decorator
{
public override void DoWork()
{
base.DoWork();
CleanTheFloor();
}

private string CleanTheFloor()
{
return "Мля, ещё и пол вам помой!?";
}
}
}

Сказки о Design Patterns

Previous post Next post
Up