Декоратор (шаблон)

от Уикипедия, свободната енциклопедия
Направо към: навигация, търсене

Декоратор (на английски: Decorator) е структурен шаблон за дизайн, който се използва в обектно-ориентираното програмиране.

Този шаблон може да бъде използван за разширяването на функционалността на опеределен клас по времето на изпълнение на програмата, като запазва интерфейса му. Това разширение може да бъде постигнато чрез прибавянето на нов клас които "обвива" оригиналния клас. Декораторите предоставят гъвкава алтернатива на наследяването за разширяване на функционалността.

Примери[редактиране | edit source]

C++[редактиране | edit source]

C#[редактиране | edit source]

Пример за Декоратор [1]

using System;
using System.Collections.Generic;
using System.Text;
 
 
 
class DecoratorPatterns
{
 
	// Decorator Pattern   програмен шаблон за Декоратор - автор Judith Bishop  Dec 2006
	// Показва 2 декоратора и изводът от различни компбинации
	// на декоратори върху основния компонент
 
 
	interface IComponent
	{
		string Operation ();
	}
 
	class Component : IComponent
	{
		public string Operation ()
		{
			return "I am walking "; //Аз вървя
		}
	}
 
	class DecoratorA : IComponent
	{
		IComponent component;
 
		public DecoratorA ( IComponent c )
		{
			component = c;
		}
 
		public string Operation ()
		{
			string s = component.Operation ();
			s += "and listening to Classic FM "; //и слушам радио Классик
			return s;
		}
	}
 
	class DecoratorB : IComponent
	{
		IComponent component;
		public string addedState = "past the Coffee Shop "; //вече съм минал покрай кафето
 
 
		public DecoratorB ( IComponent c )
		{
			component = c;
		}
 
		public string Operation ()
		{
			string s = component.Operation ();
			s += "to school "; //към училище
			return s;
		}
 
		public string AddedBehavior () //прибавено поведение
		{
			return "and I bought a cappuccino "; //и си купих капучино
		}
	} //eof class
 
	class Client
	{
 
		static void Display ( string s, IComponent c )
		{
 
			Console.WriteLine ( s + c.Operation () );
		} //eof method
 
 
		static void Main ()
		{
			Console.WriteLine ( "Decorator Pattern\n" );
 
			IComponent component = new Component ();
			Display ( "1. Basic component: ", component );
			Display ( "2. A-decorated : ", new DecoratorA ( component ) );
			Console.ReadLine (); //изчакай удар по конзолата от потребителя
			Display ( "3. B-decorated : ", new DecoratorB ( component ) );
			Console.ReadLine ();
			Display ( "4. B-A-decorated : ", new DecoratorB ( new DecoratorA ( component ) ) );
			// Explicit DecoratorB
			Console.ReadLine ();
			DecoratorB b = new DecoratorB ( new Component () );
			Display ( "5. A-B-decorated : ", new DecoratorA ( b ) );
			// Invoking its added state and added behavior
			Console.WriteLine ( "\t\t\t" + b.addedState + b.AddedBehavior () );
			Console.ReadLine ();
		} //eof Main
	} //eof class Client
} //eof class DecoratorPatterns
/* Output --- изводът на информация по конзолният прозорец
Decorator Pattern
 
1. Basic component: I am walking
2. A-decorated : I am walking and listening to Classic FM -
3. B-decorated : I am walking to school
4. B-A-decorated : I am walking and listening to Classic FM to school
5. A-B-decorated : I am walking to school and listening to Classic FM
				 past the Coffee Shop and I bought a cappuccino
*/

Java[редактиране | edit source]

Източници[редактиране | edit source]

  1. C# 3.0 Design Patterns - Judith Bishop