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();
Flutter 之 构造函数和单例
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。