我不是很专业,我觉得很难描述我的问题,所以请问是否有任何不清楚的地方:
我有一个名为BaseDevice的抽象类。 其他设备,如Beacon和Transponder,继承自BaseDevice。 例如Beacon,它有BaseClass方法PLUS自己的属性和方法。 让我们说,这些设备之间的区别在于,一个有2个LED,一个有LCD
目前它不可能制作设备转发器以及Beacon(或者我必须将它们兼容到一个新的类中,这是不需要的。)
所以,例如, 我希望能够让设备说出来:“你有一个LED”,“你有2个LCD”或者其他什么。并且应该提供随附的所有方法和属性。 我仍然需要能够看到我的设备列表中的设备“他有一个(或更多)LED”
结论:我想把我的“是A”变成“有A”(如四人帮推荐)。
我已经读过一次关于工厂设计模式的文章,看起来很复杂。在这种情况下,这会是一个很好的解决方案吗?
也许我在这里使用了一些超出我所知的温度,这个项目是第一个使用抽象类等的项目。我真的不是那么多面向对象的程序员。设计模式对我来说很难阅读,因此非常欢迎易于阅读的答案。
答案 0 :(得分:1)
对我而言,这听起来像是你需要Decorator。
在面向对象的编程中,装饰器模式是一种设计模式,允许动态地将新/附加行为添加到现有对象。
装饰器模式是子类化的替代方法。子类在编译时添加行为,并且更改会影响原始类的所有实例;装饰可以在运行时为单个对象提供新的行为。
棘手的部分是为所有子类定义一个公共接口。如果无法做到这一点,那么无论如何都不能以多态方式使用对象。
答案 1 :(得分:1)
我认为您需要的是一些用于设备组件的附加类。例如,如果存在与LED相关的某些行为,并且您发现自己复制/粘贴此代码,则表明您需要LED类。
这样,您可以使用List<LED>
字段和Add(LED newLed)
方法,您可以在具体组件上使用它。基本上这是“有A”的关系。您可以使用另一个LCD类,现在您可以在具体类中混合和匹配这些内容。