Last active
March 22, 2020 18:33
-
-
Save kranfix/bda7024a78cf0b819028b1435a5ed735 to your computer and use it in GitHub Desktop.
Dart: Inheritance issues
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Reference: https://talks.golang.org/2014/go4java.slide#41 | |
// DartPad: https://dartpad.dev/bda7024a78cf0b819028b1435a5ed735 | |
// Gist: https://gist.github.com/kranfix/bda7024a78cf0b819028b1435a5ed735 | |
void main() { | |
const List<Task> tasks = [Task("one"), Task("two"), Task("three")]; | |
final runner = ExtendedRunCounter("My run counter"); | |
//final runner = ComposedRunCounter("My run counter"); | |
runner.runAll(tasks); | |
print("${runner.name} ran ${runner.count} tasks"); | |
} | |
//void printd(Object object) => print(object); | |
void printd(Object object) => null; | |
class Task { | |
final String key; | |
const Task(this.key); | |
run() => print("Running task $key"); | |
} | |
class Runner { | |
final String name; | |
Runner(this.name); | |
void run(Task task){ | |
printd("[$runtimeType($name).run]"); | |
task.run(); | |
} | |
void runAll(List<Task> tasks){ | |
printd("[$runtimeType($name).runAll]"); | |
for(final task in tasks){ | |
run(task); | |
} | |
} | |
} | |
class ExtendedRunCounter extends Runner { | |
ExtendedRunCounter(String name) : _count = 0, super(name); | |
int _count; | |
int get count => _count; | |
@override | |
void run(Task task){ | |
printd("[$runtimeType($name).run]"); | |
_count++; | |
super.run(task); | |
} | |
@override | |
void runAll(List<Task> tasks){ | |
printd("[$runtimeType($name).runAll]"); | |
_count += tasks.length; | |
super.runAll(tasks); | |
} | |
} | |
class ComposedRunCounter { | |
ComposedRunCounter(String name) : _count = 0, _runner = Runner(name); | |
int _count; | |
int get count => _count; | |
Runner _runner; | |
String get name => _runner.name; | |
void run(Task task){ | |
printd("[$runtimeType($name).run]"); | |
_count++; | |
_runner.run(task); | |
} | |
void runAll(List<Task> tasks){ | |
printd("[$runtimeType($name).runAll]"); | |
_count += tasks.length; | |
_runner.runAll(tasks); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment