Interfaces trong Dart (implements)
1. Giới thiệu
Trong Dart, mọi class đều implicit là một interface. Sử dụng implements để class phải implement tất cả members.
2. Implicit Interface
class Printable {
void print() {
print('Printing...');
}
}
class Document implements Printable {
@override
void print() {
print('Printing document');
}
}3. Implement nhiều interfaces
class Printer {
void print() {}
}
class Scanner {
void scan() {}
}
class Copier {
void copy() {}
}
class AllInOne implements Printer, Scanner, Copier {
@override
void print() => print('Printing');
@override
void scan() => print('Scanning');
@override
void copy() => print('Copying');
}4. Abstract class làm interface
abstract class Drawable {
void draw();
void erase();
}
abstract class Movable {
void move(int x, int y);
}
class Shape implements Drawable, Movable {
@override
void draw() => print('Drawing shape');
@override
void erase() => print('Erasing shape');
@override
void move(int x, int y) => print('Moving to ($x, $y)');
}5. extends vs implements
class Animal {
String name;
Animal(this.name);
void eat() => print('$name is eating');
}
// extends: kế thừa implementation
class Dog extends Animal {
Dog(String name) : super(name);
// Kế thừa eat() từ Animal
}
// implements: phải implement lại tất cả
class Robot implements Animal {
@override
String name;
Robot(this.name);
@override
void eat() => print('Robot cannot eat');
}6. Kết hợp extends, implements, with
abstract class Animal {
void breathe();
}
mixin Swimming {
void swim() => print('Swimming');
}
class Fish extends Animal with Swimming implements Comparable<Fish> {
int size;
Fish(this.size);
@override
void breathe() => print('Breathing underwater');
@override
int compareTo(Fish other) => size.compareTo(other.size);
}7. Interface segregation
// Tách interface nhỏ
abstract class Readable {
String read();
}
abstract class Writable {
void write(String data);
}
abstract class Deletable {
void delete();
}
class TextFile implements Readable, Writable, Deletable {
String _content = '';
@override
String read() => _content;
@override
void write(String data) => _content = data;
@override
void delete() => _content = '';
}
class ReadOnlyFile implements Readable {
final String _content;
ReadOnlyFile(this._content);
@override
String read() => _content;
}8. Generic Interface
abstract class Repository<T> {
T? findById(int id);
List<T> findAll();
void save(T item);
void delete(int id);
}
class UserRepository implements Repository<User> {
final List<User> _users = [];
@override
User? findById(int id) =>
_users.firstWhere((u) => u.id == id);
@override
List<User> findAll() => List.from(_users);
@override
void save(User item) => _users.add(item);
@override
void delete(int id) =>
_users.removeWhere((u) => u.id == id);
}📝 Tóm tắt
- Mọi class trong Dart là implicit interface
implementsbắt buộc implement tất cả membersextendskế thừa,implementsđịnh nghĩa contract- Có thể implement nhiều interfaces
- Kết hợp với mixins cho flexibility
Last updated on