Здравствуйте, WolfHound, Вы писали:
WH>Мне не нужно выводить в несколько логгеров. Хотя эсли это понадобится я это легко сделаю.
WH>Логгер у меня один но много сессий. И для каждой сесии нужно что-то дописать в лог.
WH>А внутри сессии есть запросы. И для каждого запроса тоже что-то нужно дописать в лог.
Chain of Responsibility позволяет декорировать поведение. Ты делаешь базовый логгер и логгер который что-то дописывает в зависимости от сессии, расшряя (но не заменяя) поведение базового. Я не зря указал отдельно is_handled и отдельно is_canceled. Воспринимай Chain of Responsibility как список декораторов (собственно это и есть список декораторов).
WH>Скрещивание ежа с ужом это разговор отдельный и в любом случае требует изучения работы всех функций.
WH>Кстати зачем выделеное SomeGlobalDelegateTable? В многопоточностью проблем не боишься?
Global потому что время жизни подписки может быть больше, чем время жизни объекта. Например, возьмём интероп к HTMLayout.
Есть HTML код
<html>
<head>
</head>
<body>
<div id="box" style="width: 100px; height: 100px">
Click me!
</div>
</body>
</html>
и я хочу подписаться на мышиное сообщение для div. Выглядит это так
HtmlTag div = _htmlView.Root.SelectFirst("div#box");
div.Mouse += OnMouse;
После чего объект div благополучно уничтожается и собирается сборщиком мусора, а вот оповещения в OnMouse приходят.
WH>Не грузить то что грузить не нужно никак не связано с тем используются синглетоны или нет.
Просто с синглтонами эта проблема решается сама собой, без дополнительных усилий.