Flutter 之 构造函数和单例

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

友情链接更多精彩内容