【发布时间】:2016-11-23 07:07:09
【问题描述】:
假设有两个抽象类:
Log:
property:timestamp;
property:message;
LogFormatter:
(String *)formatlog:(Log)log;
这看起来像一座桥,Log 的行为类似于 Abstraction,LogFormatter 的行为类似于 Implementor。在我看来,bridge 不能将原始方法添加到Implementor。但是我想在以后动态添加属性来登录,并使用LogFormatter的子类来格式化它。这将破坏Liskov Substitution principle。
有人有什么建议吗?
【问题讨论】:
-
如何为扩展属性使用组合?日志可以包含一组
ExtendedLogProperty,甚至只是一个Map。这将在合同中明确指出某些属性始终存在并且是Log架构的一部分,而其他属性可能会丢失。至此,LSP 没有中断,因为您不必缩小formatlog的合约范围。 -
为您的技术找到一个日志库,不要重新发明轮子。
标签: oop design-patterns object-oriented-analysis