Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Сериализация составных классов и колекций






Для того, чтобы серилизировать сложный класс необходимо пометить атрибутом [Serializable] все вложенные классы после чего, для сериализации объектов в файлы xml используется класс XmlSerializer.

Экземпляр XmlSerializer принимает один аргумент, который содержит информацию о сирелизируемом типе, это делается с помощью typeof. Далее с помощью метода Serialize, сохраняется объект в поток, целевой поток и объект передаются через аргумент. Серелизуемцый класс также должен содержать атрибут [Serializable].

 

39. Участники шаблона «Декоратор»

Component: абстрактный класс, который определяет интерфейс для наследуемых объектов

ConcreteComponent: конкретная реализация компонента, в которую с помощью декоратора добавляется новая функциональность

Decorator: собственно декоратор, реализуется в виде абстрактного класса и имеет тот же базовый класс, что и декорируемые объекты. Поэтому базовый класс Component должен быть по возможности легким и определять только базовый интерфейс.

Класс декоратора также хранит ссылку на декорируемый объект в виде объекта базового класса Component и реализует связь с базовым классом как через наследование, так и через отношение агрегации.

Классы ConcreteDecoratorA и ConcreteDecoratorB представляют дополнительные функциональности, которыми должен быть расширен объект ConcreteComponent. ConcreteDecoratorA добавляет новое свойство NewState, а ConcreteDecoratorB добавляет новый метод NewMethod(). Подобных классов может быть множество. И они не обязательно должны что-то добавлять: свойства, методы. Они просто могут переопределять уже имеющийся функционал.

40. Основная идея «Декоратора». Область применения.

Декоратор (Decorator) представляет структурный шаблон проектирования, который позволяет динамически подключать к объекту дополнительную функциональность.

Для определения нового функционала в классах нередко используется наследование. Декораторы же предоставляет наследованию более гибкую альтернативу, поскольку позволяют динамически в процессе выполнения определять новые возможности у объектов.

Когда следует использовать декораторы?

Когда надо динамически добавлять к объекту новые функциональные возможности. При этом данные возможности могут быть сняты с объекта

Когда применение наследования неприемлемо. Например, если нам надо определить множество различных функциональностей и для каждой функциональности наследовать отдельный класс, то структура классов может очень сильно разрастись. Еще больше она может разрастись, если нам необходимо создать классы, реализующие все возможные сочетания добавляемых функциональностей.

 

41. Реализация шаблона «Декоратор»

Для реализации декоратора необходимо определить декорируемый класс, возможно также декорировать классы производные от некого класса, далее необходимо определить класс декоратора этот класс есть дочерний класс от родительского или родительского класса декорируемых классов. Обычно в классе декоратора встраивают поле для класса родителя и это поле присваивают аргументу конструктора декоратора, также конструктор декоратора содержит все аргументы класса родителя, и с помощью этих аргументов и ключевого слова base вызывается конструктор родителя.

Далее определяются декораторы, они дочерни относительно класса декоратора. Декораторы содержат конструкторы, которые принимают декорируемый класс либо родительский класс декорируемых классов.

Поля этого класса, передаваемого в конструктор, служат аргументами для наследуемого конструктора. Также в этом классе переопределяются все нужные свойства и методы.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.