Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
82 / 60 / 17
Регистрация: 21.08.2015
Сообщений: 1,075
1

Разобраться с паттерном Decorator

19.11.2017, 13:00. Показов 1579. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. У кого есть время и терпенье, помогите разобрать с декоратором… (На примере С#)
Хочу добавить к классу DirectoryInfo метод возвращающий размер директории.
Насколько я понял, первое что нам необходимо сделать, это создать класс Декоратор унаследованный от Абстрактного класса FileSystemInfo.
Дальше пошли ошибки «'FileSystemInfoDecorator' does not implement inherited abstract member 'FileSystemInfo.Exists.get'»
Что-то мне кажется, что я делаю что-то не то…


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System.IO;
 
namespace ExampleOfDecorator
{
    class go_go_Decorator
    {
        static void Main(string[] args)
        {
        }
    }
 
    class FileSystemInfoDecorator : FileSystemInfo
    {
 
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2017, 13:00
Ответы с готовыми решениями:

Не могу разобраться с паттерном Стратегия
Здравствуйте. Изучал раньше Java, сейчас хотел попробывать себя в шарпе. Но столкнулся с одной...

Подскажите, как разобраться с паттерном "Стратегия"
Вики прочитал, но чет все равно не могу догнать. Туго у меня с пониманием теории Нужно выполнить...

DefautParameters decorator
Задача: декорировать функции значениями по дефолту(связывание по именам...

Паттерн Decorator
Имеется небольшая php-страница, работающая с БД. Имеется класс для поиска в БД записи по введенной...

8
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
19.11.2017, 13:16 2
Во-первых, при чем тут декоратор?

Во-вторых, говоришь, что
Цитата Сообщение от Чипс Посмотреть сообщение
Хочу добавить к классу DirectoryInfo
При этом наследуешься почему-то не от него.
0
82 / 60 / 17
Регистрация: 21.08.2015
Сообщений: 1,075
19.11.2017, 13:29  [ТС] 3
Цитата Сообщение от 0x10 Посмотреть сообщение
Во-первых, при чем тут декоратор?
Ну потому что надо делать при помощи него, разве нет?

Цитата Сообщение от 0x10 Посмотреть сообщение
наследуешься почему-то не от него
А что надо наследовать?
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
19.11.2017, 14:00 4
Еще раз, исходная задача: есть класс DirectoryInfo, нужно расширить его новым методом. Создаем класс-наследник DirectoryInfo, добавляем метод. Все.
0
82 / 60 / 17
Регистрация: 21.08.2015
Сообщений: 1,075
19.11.2017, 14:16  [ТС] 5
Цитата Сообщение от 0x10 Посмотреть сообщение
Создаем класс-наследник DirectoryInfo, добавляем метод. Все
https://msdn.microsoft.com/ru-... .110).aspx

public sealed class DirectoryInfo : FileSystemInfo

Ключевое слово sealed запрещает наследование от класса DirectoryInfo
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
19.11.2017, 14:26 6
Лучший ответ Сообщение было отмечено Чипс как решение

Решение

Тогда так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.IO;
 
public static class DirectoryInfoExtension
{
    public static int GetDirectorySize(this DirectoryInfo directoryInfo)
    {
        return 42;
    }
}
 
public class Test
{
    public static void Main()
    {
        DirectoryInfo di = new DirectoryInfo(".");
        Console.WriteLine(di.GetDirectorySize());
    }
}
Но это не задача для декоратора.
1
82 / 60 / 17
Регистрация: 21.08.2015
Сообщений: 1,075
19.11.2017, 14:38  [ТС] 7
Цитата Сообщение от 0x10 Посмотреть сообщение
Но это не задача для декоратора.
По описанию декоратора вроде подходит под его задачи, судя по всему я не могу понять нечто важное...

Спасибо за ответ, но не могли бы вы немного пояснить что именно происходит в этой строке?
C#
1
2
3
4
    public static int GetDirectorySize(this DirectoryInfo directoryInfo)
    {
        return 42;
    }
Добавлено через 6 минут
Ах да, методы расширения...

Тупняк совсем одолевает...
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
19.11.2017, 14:39 8
Цитата Сообщение от Чипс Посмотреть сообщение
По описанию декоратора вроде подходит под его задачи, судя по всему я не могу понять нечто важное...
Декоратор полезен, если нужно существующий метод дополнить некоторым функционалом. Например, добавить логирование до и/или после вызова основного метода или замеры времени или вовсе заменить основной функционал заглушкой.

Здесь же — расширение функциональности класса. Решить классом-оберткой можно, но будет слишком громоздко.

Цитата Сообщение от Чипс Посмотреть сообщение
не могли бы вы немного пояснить что именно происходит в этой строке?
Extension Methods — как раз способ добавления функционала в класс без создания подкласса.
0
82 / 60 / 17
Регистрация: 21.08.2015
Сообщений: 1,075
19.11.2017, 14:57  [ТС] 9
Спасибо большое.
0
19.11.2017, 14:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2017, 14:57
Помогаю со студенческими работами здесь

Патерн Decorator для программы
мне нужно использовать паттерн Decorator в моей программе. У меня есть две функции в разных...

Как правильно применять патерн Decorator
на примере системы управления точкой по продаже кофе с помощью паттерна Decorator class Coffee {...

Неправильно работает простейший пример паттерна Decorator
Доброе время суток! Решил попрактиковаться в С#, в visual studio набрал такое консольное...

Применение паттерна Decorator при создании элемента калькулятора
Здравствуйте. Мне необходимо реализовать функции калькулятора с помощью паттерна Decorator. Вроде...

В чём отличия и сходства паттернов Adapter, Decorator, Wrapper и Proxy?
Здравствуйте. Разбираюсь понемного с паттернами проектирования, и не могу понять разницу в данных...

Незадача с паттерном Цепочка обязанностей
В общем задание такое. Реализовать сказку(колобок). Естественно не через cout . И с обязательным...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru