พิจารณาอินเทอร์เฟซ:
interface IWaveGenerator
{
SoundWave GenerateWave(double frequency, double lengthInSeconds);
}
อินเทอร์เฟซนี้ถูกใช้งานโดยคลาสที่สร้างคลื่นของรูปร่างที่แตกต่างกัน (ตัวอย่างเช่นSineWaveGenerator
และSquareWaveGenerator
)
ฉันต้องการใช้คลาสที่สร้างSoundWave
จากข้อมูลดนตรีไม่ใช่ข้อมูลเสียงดิบ มันจะได้รับชื่อของโน้ตและระยะเวลาในแง่ของการเต้น (ไม่กี่วินาที) ที่และภายในใช้IWaveGenerator
ฟังก์ชั่นในการสร้างSoundWave
ตาม
คำถามคือควรNoteGenerator
ประกอบด้วยIWaveGenerator
หรือควรได้รับมรดกจากการIWaveGenerator
ดำเนินการ?
ฉันเอนตัวไปยังองค์ประกอบเนื่องจากเหตุผลสองประการ:
1- มันช่วยให้ฉันสามารถฉีดใด ๆIWaveGenerator
ไปยังNoteGenerator
แบบไดนามิก นอกจากนี้ฉันต้องการเพียงหนึ่งNoteGenerator
ชั้นแทนSineNoteGenerator
, SquareNoteGenerator
ฯลฯ
2- มีความต้องการไม่ได้ที่จะเปิดเผยอินเตอร์เฟซในระดับต่ำกว่าที่กำหนดโดยNoteGenerator
IWaveGenerator
อย่างไรก็ตามฉันโพสต์คำถามนี้เพื่อฟังความคิดเห็นอื่น ๆ เกี่ยวกับเรื่องนี้อาจเป็นจุดที่ฉันไม่ได้คิด
BTW: ฉันจะบอกว่าNoteGenerator
เป็นแนวคิดIWaveGenerator
เพราะมันสร้างSoundWave
s