dart_in_action/37_design_pattern_visitor.dart

87 lines
2.1 KiB
Dart
Raw Normal View History

2019-03-27 10:55:27 +08:00
/**
访Visitor Pattern
使"污染"使访
访访
*/
main(List<String> args) {
ComputerPart computer = Computer();
computer.accept(ComputerPartDisplayVisitor());
}
//////////////////////////////////////////////////////////////////
///
/// 定义一个表示元素的接口
///
abstract class ComputerPart {
void accept(ComputerPartVisitor computerPartVisitor);
}
///
/// 创建扩展了上述类的实体类
///
class Keyboard implements ComputerPart {
@override
void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
class Monitor implements ComputerPart {
@override
void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
class Mouse implements ComputerPart {
@override
void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
class Computer implements ComputerPart {
List<ComputerPart> _parts;
Computer() {
_parts = [Mouse(), Keyboard(), Monitor()];
}
@override
void accept(ComputerPartVisitor computerPartVisitor) {
for (int i = 0; i < _parts.length; i++) {
_parts[i].accept(computerPartVisitor);
}
computerPartVisitor.visit(this);
}
}
///
/// 定义一个表示访问者的接口
///
abstract class ComputerPartVisitor {
void visit(dynamic part);
}
///
/// 创建实现了上述类的实体访问者
///
class ComputerPartDisplayVisitor implements ComputerPartVisitor {
@override
void visit(part) {
if (part is Computer) {
print("Displaying Computer.");
} else if (part is Mouse) {
print("Displaying Mouse.");
} else if (part is Keyboard) {
print("Displaying Keyboard.");
} else if (part is Monitor) {
print("Displaying Monitor.");
}
}
}