在Dart中,是否可以单例传递参数?

drm*_*irk 2 oop singleton dart flutter

class Peoples {
  int id;
  String name;

  static final Peoples _inst = Peoples._internal();

  Peoples._internal();

  factory Peoples() {
    return _inst;
  }
}
Run Code Online (Sandbox Code Playgroud)

我有这个单例课程。这样可以确保只创建一个类的实例。因此,即使有人尝试实例化它,他们也将使用相同的实例。我可以创建和设置值,例如:

  Peoples ps1 = Peoples();
  Peoples ps2 = Peoples();

  ps1.id = 1;
  ps1.name = "First";

  ps2.id = 2;
  ps2.name = "Second";
Run Code Online (Sandbox Code Playgroud)

是否可以实例化和设置值,例如:

  Peoples ps1 = Peoples(1, "First");
  Peoples ps2 = Peoples(2, "Second");
Run Code Online (Sandbox Code Playgroud)

因此,现在“ ps1”和“ ps2”都将具有(2,“ Second”)。

小智 6

当然!您需要将参数传递给factory方法,然后需要使用引用的实例来更新属性。

例如,你有

class Peoples {
  int id;
  String name;

  static final Peoples _inst = Peoples._internal();

  Peoples._internal();

  factory Peoples() {
    return _inst;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您应用我的解决方案,那么您有

class Peoples {
  int id;
  String name;

  static final Peoples _inst = Peoples._internal();

  Peoples._internal();

  factory Peoples({int id, String name}) {
    _inst.id = id
    _inst.name = name
    return _inst;
  }
}
Run Code Online (Sandbox Code Playgroud)

与此有关的您的问题应回答有关工厂和参数访问的更多信息

https://dart.dev/guides/language/language-tour

工作实例

class Peoples {
  int id;
  String name;

  static final Peoples _inst = Peoples._internal();

  Peoples._internal();


  factory Peoples(int id, String name) {
    _inst.id = id;
    _inst.name = name;
    return _inst;
  }
}

void main() {
  print("Instance of = " + Peoples(0, "Dylan").name);
  print("Instance of = " + Peoples(1, "Joe").name);
  print("Instance of = " + Peoples(2, "Maria").name);
}
Run Code Online (Sandbox Code Playgroud)

  • 有什么方法可以使用 Final int id 和 Final String name 来做到这一点吗? (6认同)