Використання в обох випадках просте, але що означає включити параметр до Parser1 порівняно з іншими?
Його фундаментальний зрушення в дизайні. І дизайн повинен передавати наміри та сенс. Чи потрібно мати окремі об'єкти для кожного рядка, який ви хочете проаналізувати? Іншими словами, навіщо нам потрібен екземпляр парсера з stringX та інший екземпляр з stringY? Що стосується розбору (англ.) Та даного рядка, що вони повинні жити і вмирати разом? Якщо припустити, що "основна [розбір] реалізації" (як каже Роберт Харві) не змінюється, то, здається, немає сенсу. І навіть тоді його сумнівний ІМХО.
Як змінюється концепція класу при передачі даних конструктору замість параметрів методу?
Параметри конструктора говорять мені, що ці речі необхідні для об'єкта. Належний стан без них не гарантується. Також я знаю, як / чому один парсер принципово відрізняється від іншого.
Параметри конструктора не дозволяють мені занадто багато знати про використання класу. Якщо замість цього я повинен встановити певні властивості - як я можу це знати? Відкривається ціла банка глистів. Які властивості? У якому порядку? Перш ніж використовувати які методи? і так далі.
Інше питання виникає, коли я розумію, що інтерфейс був би зовсім безглуздим у другій реалізації:
Інтерфейс, як і в API, - це методи та властивості, що піддаються дії клієнтського коду. Не загортайтеся public interface { ... }
виключно. Отже, сенс інтерфейсу полягає в дилемі параметрів або конструктор або метод, НЕ public interface Iparser
протиpublic sealed class Parser
sealed
Клас непарний. Якщо я замислююся над різними реалізаціями парсера - ви згадали про "Iparser" - то спадщина - це моя перша думка. Це просто природне концептуальне продовження в моєму мисленні. IE всі ParserX
s є принципово Parser
s. Як інакше сказати? ... Німецький Шепард - собака (спадщина), але я можу навчити свого папугу гавкати (діяти як собака - "інтерфейс"); але Поллі - не собака, а просто прикидається, навчившись підмножини догматичності. Класи, абстрактні чи іншим чином, чудово служать інтерфейсом .