class Person {
String name;
num age;
// 声明一个和类名相同的函数作为类的构造函数(与有名构造函数作对比,也被称作无名构造函数)
// Point(num x, num y) {
// this.x = x;
// this.y = y;
// }
// 简写为
Person(this.name, this.age);
// 命名构造函数
Person.fromMap(Map m) {
name = m['name'];
age = m['age'];
}
// 重定向构造函数,调用同一个类中的另外一个构造函数
Person.withName(String name) : this(name, 0);
}
class Student extends Person {
// 如果父类没有无名无参数的默认构造函数,子类必须手动调用一个父类构造函数(: super.xx)
Student(String name, num age) : super(name, age);
}
class StaticPerson {
final String name;
// 常量构造函数,如果类生成从来不改变的对象,则可以把这些对象定义为编译器常量,使用const修饰构造函数
const StaticPerson(this.name);
}
class Logger {
final String name;
bool mute = false;
static final Map<String, Logger> _cache = <String, Logger>{};
// 如果一个构造函数并不总是要创建新的对象(或从缓存中返回实例),可以用factory关键字修饰构造函数
factory Logger(String name) {
if (_cache.containsKey(name)) {
return _cache[name];
} else {
final logger = Logger._internal(name);
_cache[name] = logger;
return logger;
}
}
Logger._internal(this.name);
void log(String msg) {
if(!mute) {
print(msg);
}
}
}
class Manager {
// 工厂模式
factory Manager.shared() =>_getInstance();
static Manager get instance => _getInstance();
static Manager _instance;
Manager._internal() {
// 初始化
}
static Manager _getInstance() {
_instance ??= Manager._internal();
return _instance;
}
}
// 调用
Manager manager = Manager.shared();
网友评论