Първо, важно е да споменем две понятия и да разбере разликата между тях –
Design Principle и Design Pattern.
Design Principle е така да се каже по-общото. Това са общи, добри практики, които е добре да се спазват, независимо от езика за програмиране и не предлагат конкретни начини на приложение. Това са чисто абстракни принципи.
Един пример за design principles са например SOLID принципите.
Design patterns са вече по-конкретни решения на различни проблеми от ООП, но спазвайки design principles. Например, искаме от даден клас да имаме само един обект – използваме Singleton design pattern, ето това е една design pattern.
Design patterns са отново независими от езикът за програмиране както design principles, но са по-скоро практическото приложение на design principles.
Също, когато прилагаме или създаваме design pattern, трябва винаги да внимаваме да не нарушаваме design principle. По принцип един клас винаги се пише така, че да има една „основна отговорност“, заради която бива писан, и отделно – различни, така да се каже „помощни“ функционалности, като например логери, емайл, спелчекъри…
За такива е идеята – да бъдат отделени като отделни класове и да бъдат инджектвани.
Литература:
https://www.tutorialsteacher.com/articles/difference-between-design-principle-and-design-pattern