Dart 委托模式的案例Demo

19 min read
// 定义一个接口,用于定义解析器的行为
abstract class LogParser {
  String parse(String logLine);
}

// 定义一个具体的解析器,用于处理 JSON 格式的日志
class JsonLogParser implements LogParser {
  @override
  String parse(String logLine) {
    // 解析 JSON 格式的日志
    // ...
    return "Parsed log: $logLine";
  }
}

// 定义一个具体的解析器,用于处理 XML 格式的日志
class XmlLogParser implements LogParser {
  @override
  String parse(String logLine) {
    // 解析 XML 格式的日志
    // ...
    return "Parsed log: $logLine";
  }
}

// 定义日志处理器,使用委托模式来处理不同格式的日志
class LogProcessor {
  LogParser _parser;

  // 使用构造函数来注入委托对象
  LogProcessor(this._parser);

  void process(String logLine) {
    String parsedLog = _parser.parse(logLine);
    print(parsedLog);
  }
}

void main() {
  // 创建一个日志处理器,并使用 JSON 解析器来处理日志
  LogProcessor processor = LogProcessor(JsonLogParser());
  processor.process('{"log": "some log"}');

  // 创建一个日志处理器,并使用 XML 解析器来处理日志
  processor = LogProcessor(XmlLogParser());
  processor.process('<log>some log</log>');
}

在这个示例中,我们定义了一个接口 LogParser,用于定义解析器的行为。然后,我们定义了两个具体的解析器,分别用于处理 JSON 格式和 XML 格式的日志。最后,我们定义了一个日志处理器 LogProcessor,该日志处理器使用委托模式来处理不同格式的日志。在 LogProcessor 类中,我们定义了一个委托对象引用 _parser,并在构造函数中通过参数注入委托对象。当我们调用 process 方法时,日志处理器会调用委托对象的 parse 方法来解析日志。

main 函数中,我们创建了两个日志处理器,分别使用 JSON 解析器和 XML 解析器来处理日志。这样,当你需要处理不同格式的日志时,你可以通过传递不同的解析器来实现。

总的来说,Dart 中的委托模式可以帮助你在一个对象中转移一些任务给另一个对象来完成而不用自己实现这些任务。这样,你就可以更方便地扩展和维护你的代码,并且可以更加灵活地处理不同的情况。