Hãy xem xét một giao diện:
interface IWaveGenerator
{
SoundWave GenerateWave(double frequency, double lengthInSeconds);
}
Giao diện này được thực hiện bởi một số lớp tạo ra các sóng có hình dạng khác nhau (ví dụ, SineWaveGenerator
và SquareWaveGenerator
).
Tôi muốn thực hiện một lớp tạo ra SoundWave
dựa trên dữ liệu âm nhạc, không phải dữ liệu âm thanh thô. Nó sẽ nhận được tên của một nốt nhạc và độ dài theo nhịp (không phải giây) và sử dụng IWaveGenerator
chức năng bên trong để tạo ra một nốt nhạc SoundWave
phù hợp.
Câu hỏi là, nó có nên NoteGenerator
chứa IWaveGenerator
hoặc nên kế thừa từ một IWaveGenerator
triển khai?
Tôi nghiêng về sáng tác vì hai lý do:
1- Nó cho phép tôi tiêm bất kỳ IWaveGenerator
vào NoteGenerator
động. Ngoài ra, tôi chỉ cần một NoteGenerator
lớp, thay vì SineNoteGenerator
, SquareNoteGenerator
vv
2- Không cần phải NoteGenerator
lộ giao diện cấp thấp hơn được xác định bởi IWaveGenerator
.
Tuy nhiên tôi đang đăng câu hỏi này để nghe ý kiến khác về vấn đề này, có thể những điểm tôi chưa nghĩ đến.
BTW: Tôi muốn nói NoteGenerator
là về mặt khái niệm IWaveGenerator
bởi vì nó tạo ra SoundWave
s.