为了举例,我有一个代表WAV声音文件的WAV
类。为方便起见,我需要添加一个名为WaveformAudioFile
的类,它具有完全相同的功能。
无论可能的设计/风格问题如何,整合新课程的适当方式是什么?通过使用扩展(没有添加任何内容),使用通用接口或其他东西?
编辑:进一步考虑这一点,如果要考虑设计,是否可以选择避免冗余代码?我的意思是,如果有几个类,编写接口会很烦人。某种可用于初始化的模式。属性?
答案 0 :(得分:2)
1。从设计的角度来看,如果您希望您的课程扮演特定角色,请转到界面。
2. 如果您有不断变化的行为,那么将它们封装在Abstract类或接口中会更好,然后扩展或实现它以指定某些功能。
////////////////////////////////////////// 编辑: 强> //////////////////////////////
我认为你指的是 DRY原则(不要重复自己),根据这个原则,更好地将你的信息和行为保持在单一明智的地方。
但是,如果相同功能的不同类的行为不同,那该怎么办呢?
例如:
将Painting
视为带有paint() Method
的类。
现在
paint()方法可以有Stroking,gliding,shading等样式。
然后更好地将该方法封装到Abstract类或接口。
public interface Paint{
paintDoIt(String style);
}
不是一件令人讨厌的工作,而是关于的灵活性,并且能够在不触及太多课程且不破坏代码的情况下进行更改。
只有一件事是软件工程中的常数 CHANGE
。
所以我们需要采纳它。
答案 1 :(得分:1)
使用公共interface
并在两个类中实现它。一个主要的好处是你的WAVE,所有类都可以扩展任何其他类。
答案 2 :(得分:1)
从我的角度来看,界面是最好的解决方案。为实现此类功能的类声明一个公共接口,并使用此接口而不是直接类类型定义。
例如:
ISoundFile mySoundFile = getSoundFile();
ISoundFile
是您声明的接口。
答案 3 :(得分:0)
添加此内容可能会引起某些人的兴趣。我想到了另一种解决方案,那就是简单地使用包装类:)。