Паттерн Memento

Posted: Апрель 21, 2011 in .NET, Паттерны
public class Memento<T>
{
	private Dictionary<PropertyInfo, object> storedProperties = new Dictionary<PropertyInfo, object>();

	public Memento( T originator )
	{
		this.InitializeMemento( originator );
	}

	public T Originator
	{
		get;
		protected set;
	}

	public void Restore( T originator )
	{
		foreach ( var pair in this.storedProperties )
		{
			pair.Key.SetValue( originator, pair.Value, null );
		}
	}

	private void InitializeMemento( T originator )
	{
		if ( originator == null )
			throw new ArgumentNullException( "Originator", "Originator cannot be null" );

		this.Originator = originator;
		IEnumerable<PropertyInfo> propertyInfos = typeof( T ).GetProperties( BindingFlags.Public | BindingFlags.Instance ).Where( p => p.CanRead && p.CanWrite );

		foreach ( PropertyInfo property in propertyInfos )
			this.storedProperties[ property ] = property.GetValue( originator, null );
	}
}
Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s