推荐答案
在 Dart 中,工厂构造函数(factory constructor)是一种特殊的构造函数,它并不总是创建类的新实例。工厂构造函数可以返回缓存中的实例、子类的实例,或者根据条件返回不同的对象。工厂构造函数通常用于实现单例模式、延迟初始化或返回子类实例。
-- -------------------- ---- ------- ----- ------ - ------ ----- ----------- ------- ------ - -------- ---------- ----- ------ ----- -- ------ ---------------------------- -- ------ ------- ------------- ----- - -- -------------------------- - ------ -------------- - ---- - ----- ------ - ----------------------- ------------ - ------- ------ ------- - - ---- ---------- -------- - ------------- ----------- - - ---- ------ - --- ------- - ------------- --- ------- - ------------- ------------- -- --------- -- --- ---- -
本题详细解读
工厂构造函数的特点
- 不总是创建新实例:与普通构造函数不同,工厂构造函数可以返回一个已经存在的实例,而不是每次都创建一个新的实例。
- 可以返回子类实例:工厂构造函数可以返回当前类的子类实例,这在某些设计模式中非常有用。
- 可以用于延迟初始化:工厂构造函数可以用于延迟初始化对象,直到真正需要时才创建实例。
工厂构造函数的语法
工厂构造函数的语法与普通构造函数类似,但在声明时需要使用 factory
关键字:
factory ClassName(parameters) { // 返回一个实例 }
工厂构造函数的常见用途
- 单例模式:通过工厂构造函数可以轻松实现单例模式,确保一个类只有一个实例。
- 缓存实例:工厂构造函数可以用于缓存实例,避免重复创建相同的对象。
- 返回子类实例:工厂构造函数可以根据条件返回不同的子类实例,这在多态设计中非常有用。
示例代码解析
在示例代码中,Logger
类使用工厂构造函数来实现缓存功能。每次调用 Logger
的工厂构造函数时,它会检查缓存中是否已经存在相同名称的 Logger
实例。如果存在,则返回缓存中的实例;如果不存在,则创建一个新的实例并将其存入缓存中。
-- -------------------- ---- ------- ------- ------------- ----- - -- -------------------------- - ------ -------------- - ---- - ----- ------ - ----------------------- ------------ - ------- ------ ------- - -
通过这种方式,Logger
类确保了相同名称的日志器只会有一个实例,从而节省了资源并避免了重复创建对象。