design-patterns

Quick-reference guide to software design patterns with concise Dart examples.

View project on GitHub

Defines the skeleton of an algorithm in a base class, letting subclasses override specific steps.

The structure stays the same, but the details vary.

abstract class DataMiner {
  // template method
  void mine(String path) {
    final raw = extractData(path);
    final parsed = parseData(raw);
    analyze(parsed);
  }

  String extractData(String path);   // subclass provides
  List<String> parseData(String raw); // subclass provides

  void analyze(List<String> data) {
    print('Analyzing ${data.length} records');
  }
}

class CsvMiner extends DataMiner {
  @override
  String extractData(String path) => 'csv,raw,data';

  @override
  List<String> parseData(String raw) => raw.split(',');
}

// Usage
CsvMiner().mine('data.csv'); // Analyzing 3 records