定义:高层模块不应该依赖于低层模块的具体实现,而应该依赖于抽象 核心思想:**要面向接口编程,不要面向实现编程 类比:使用一个通用的插座(抽象)来连接不同的电器(具体实现),而不是为每个电器设计特定的插座 应用场景 需要减少模块之间的耦合 想提高系统的可扩展性和灵活性 优点 提高系统的灵活性和可扩展性 降低模块之间的耦合度 示例:用户管理器(UserManager)依赖于抽象接口 ILogger,而不依赖于具体的日志记录器实现类 interface ILogger { log(message: string): void; } class ConsoleLogger implements ILogger { public log(message: string): void { console.log(`[ConsoleLogger] ${message}`); } } class FileManagerLogger implements ILogger { public log(message: string): void { // Log message to file console.log(`[FileManagerLogger] ${message}`); } } class UserManager { private logger: ILogger; constructor(logger: ILogger) { this.logger = logger; } public addUser(name: string): void { // Add user logic this.logger.log(`User added: ${name}`); } } // Usage const consoleLogger = new ConsoleLogger(); const fileManagerLogger = new FileManagerLogger(); const userManager1 = new UserManager(consoleLogger); userManager1.addUser('John'); const userManager2 = new UserManager(fileManagerLogger); userManager2.addUser('Jane');