我和我的朋友进行了一些辩论.我必须实现一个"浏览器进程观察器"类,每当正在监视的浏览器(比如说Internet Explorer)正在运行时,它就会调用一个事件.
我们创建了一个"过程观察者"课程,这里开始辩论:
他说构造函数应该只接受字符串(比如"iexplore.exe"),我说我们应该继承"进程观察者"来创建一个"浏览器观察者",它接受当前使用的浏览器枚举,构造函数将"翻译"它是"iexplore".他说我们应该使用一个函数函数来充当翻译器.
我知道这两种方式都是有效和良好的,但我想知道每种方法的优点和缺点,以及适用于我们的情况.
最近我一直采取"现在保持简单,如果你需要扩展它就重构"的方法.
你现在正在做的事情看起来很简单.你真的只有一个你想要处理的案例.所以我现在说采取更简单的方法.最后,如果你永远不需要制作另一种观察者,那么你将避免额外的复杂性.但是,如果需要,可以使代码更容易重构.
将来,如果您发现需要其他类型的观察者,那么请花费精力将其重构为继承(或组合,或您想要遵循的任何其他模式).如果您的初始代码完成正确,重构应该相当容易,因此您并没有真正添加额外的工作.
我发现这种方法对我来说效果很好.在我真的不需要继承的情况下,代码保持简单.但是当我确实需要它时,我可以添加它而没有任何实际问题.
在其他条件相同的情况下,我更喜欢更简单的解决方案(将字符串作为构造函数参数的单个具体类)更复杂的解决方案(使用基类和子类).
当您想要改变行为时,继承是适当的:如果浏览器观察者将执行普通进程观察者不会执行的操作.但是,如果您只想改变数据的价值,那么只需更改数据即可.