Flutter 之 构造函数和单例

2020-06-14  本文已影响0人  SnoopPanda
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();
上一篇下一篇

猜你喜欢

热点阅读