1. Single Responsibility Principle: Design a class with a single purpose
2. Open-closed principle: open to extension, closed to modification
3. Li's substitution principle: subclasses can replace superclasses
4. Dependency Inversion Principle: Depend on abstraction, not concrete implementation; program for interface, not for implementation
Fifth, the principle of composition reuse: try to use composition instead of inheritance to achieve the purpose of reuse
6. Interface isolation principle: It is better to use multiple specialized interfaces than to use a single general interface
7. Demeter's Principle: An object should know as little as possible about other objects