美文网首页
Flutter 之 构造函数和单例

Flutter 之 构造函数和单例

作者: SnoopPanda | 来源:发表于2020-06-14 11:28 被阅读0次
    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 之 构造函数和单例

          本文链接:https://www.haomeiwen.com/subject/ycdxxktx.html