dart - factory工厂函数使用,空安全单例创建

1 factory工厂函数可以看作是构造函数的一种特殊形式

  • 无法定义同名的构造函数和工厂函数
  • 工厂必须有当前类return
class Cat {
  // Cat() // 错误,不能同名
  Cat.kitten () {print("i am a kitten");}factory Cat () {
  	print("factory Cat");
	return Cat.kitten();
  }  
}

void main () {
  var c = Cat();
}

/*
输出结果:
factory Cat
i am a kitten
*/
  • 命名构造函数也可以用factory
class Cat {
  Cat.kitten() {
    print("i am a kitten");
  }
  factory Cat.tom () {
    print("factory Cat.tom");
    return Cat.kitten();
  }
}

void main() {
  var c = Cat.tom();
}

/*
输出结果:
factory Cat.tom
i am a kitten
*/

2 工厂函数,经常被用来实现类的单例模式

class Cat {
  static Cat? _instance; // ? 可空
  Cat._single(); // 命名构造函数语法糖(无参罢了)
  factory Cat () {
    if (_instance == null) {
      _instance = Cat._single();
    }
    return _instance!; // !非空断言
  } 
}
void main(List<String> args) {
  var c1 = Cat();
  var c2 = Cat();
  print(c1 == c2);
}
/*
输出结果:true
*/

当然,也可以单独用一个命名构造函数作创建单例使用

class Cat {
  static Cat? _instance; // ? 可空
  Cat._single(); // 命名构造函数语法糖(无参罢了)
  factory Cat.one () {
    if (_instance == null) {
      _instance = Cat._single();
    }
    return _instance!; // !非空断言
  } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值