dart_in_action/34_design_pattern_null_obje...

79 lines
1.9 KiB
Dart
Raw Permalink Normal View History

2019-03-27 10:55:27 +08:00
/**
Null Object Pattern
NULL
Null
Null
使
*/
main(List<String> args) {
AbstractCustomer customer1 = CustomerFactory.getCustomer("Rob");
AbstractCustomer customer2 = CustomerFactory.getCustomer("Bob");
AbstractCustomer customer3 = CustomerFactory.getCustomer("Julie");
AbstractCustomer customer4 = CustomerFactory.getCustomer("Laura");
print("Customers");
print(customer1.getName());
print(customer2.getName());
print(customer3.getName());
print(customer4.getName());
}
//////////////////////////////////////////////////////////////////
///
/// 创建一个抽象类
///
abstract class AbstractCustomer {
String _name;
bool isNil();
String getName();
}
///
/// 创建扩展了上述类的实体类
///
class RealCustomer extends AbstractCustomer {
RealCustomer(String name) {
this._name = name;
}
@override
String getName() {
return _name;
}
@override
bool isNil() {
return false;
}
}
class NullCustomer extends AbstractCustomer {
@override
String getName() {
return "Not Available in Customer Database";
}
@override
bool isNil() {
return true;
}
}
///
/// 创建 CustomerFactory 类
///
class CustomerFactory {
static final List<String> _names = ["Rob", "Joe", "Julie"];
static AbstractCustomer getCustomer(String name) {
for (int i = 0; i < _names.length; i++) {
if (_names[i] == name) {
return new RealCustomer(name);
}
}
return new NullCustomer();
}
}