Используем шаблон Memento совместно с Prototype

    public class ProductMemento
    {
        public int State { get; set; }
    }
    public abstract class Product
    {
        public abstract void EchoState();

        public abstract Product Clone();
    }
    [Key("myProduct")]
    public class MyProduct : Product
    {
        private int _state;
        public void SetState(int state)
        {
            _state = state;
        }
        public override void EchoState()
        {
            Console.WriteLine($"State: {_state}");
        }
        public ProductMemento CreateMemento()
        {
            return new ProductMemento
            {
                State = _state
            };
        }
        public void SetMemento(ProductMemento memento)
        {
            _state = memento.State;
        }
        public override Product Clone()
        {
            var clone = new MyProduct();
            clone.SetMemento(CreateMemento());
            return clone;
        }
    }

Прототипы обычно регистрируются в провайдере прототипов. Создадим такой на основе базового провайдера

    public class ProductPrototypeProvider : BaseProvider<Product>
    {
        public ProductPrototypeProvider(IEnumerable<Product> products)
            : base(products)
        {
        }
        public override Product Get(string key)
        {
            var prototype = base.Get(key);
            return prototype.Clone();
        }
    }

Код программы:

var prototype = new MyProduct();
prototype.SetState(123);

var productPrototypeProvider = new ProductPrototypeProvider(new Product[] { prototype });

var myProduct = productPrototypeProvider.Get("myProduct");
myProduct.EchoState();
По теме:
Запускаем asp.net-mvc приложения в vs в разных средах

В mvc приложении есть файл Web.config который отвечает за главные настройки приложения. И есть файлы Web.Debug.config и Web.Release.config, которые переопределяют Read more

Выполняем get запрос по расписанию c#

Напишем простенькую программу, которая будет выполнять get запрос по истечению определенного интервала времени. class Program { private static Timer _timer; Read more

Выполняем действие по расписанию (asp.net, c#)

Раньше я писал программку, которая выполняла get запрос по расписанию, но так же можно написать обычный HttpModule, который будет делать Read more

Выбираем технологии и инструменты для разработки веб приложений

1 Выбор и настройка инструментов для разработки фронтенда (только самые важные): 1.1 Twitter bootstrap — фреймворк позволяет писать качественную верстку Read more

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *