带你读《深入浅出Dart》十、更多特性(1)

简介: 带你读《深入浅出Dart》十、更多特性(1)

十、更多特性

引言

除了前面介绍的类、对象、继承、多态、抽象类和接口之外,Dart语言还提供了一些其他的面向对象的特性。这些特性可以帮助开发者更好地组织和设计他们的代码,增加代码的灵活性和可复用性。本文将深入探讨Dart中的工厂构造函数、静态成员和Mixins这些特性。

1.工厂构造函数

Dart中的工厂构造函数(Factory Constructor)是一种特殊类型的构造函数,它可以返回对象的实例,而不一定是类的实例。工厂构造函数通常用于创建复杂对象或在创建对象时执行额外的逻辑。

 

在类中定义工厂构造函数需要使用factory关键字,并且必须返回一个对象。以下是一个使用工厂构造函数的示例:

 

class Logger {
  final String name;
  static final Map _cache = {};
  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 message) {
    print('name:name: message');
  }}
void main() {
  final logger1 = Logger('Logger');
  final logger2 = Logger('Logger');
  print(identical(logger1, logger2));  // 输出 true,表示logger1和logger2是同一个对象}

 

在上面的示例中,Logger类中定义了一个工厂构造函数factory Logger(String name),用于创建Logger对象。通过使用工厂构造函数和静态成员变量_cache,我们可以确保相同名称的Logger对象只被创建一次。

2.静态成员

静态成员是属于类本身而不是类的实例的成员。可以通过在成员前面加上static关键字来定义静态成员。静态成员在类的所有实例之间共享,并且可以通过类名直接访问,无需创建类的实例。

 

静态成员包括静态变量和静态方法。以下是一个示例:

 

class MathUtils {
  static const double pi = 3.14159;
  static double calculateArea(double radius) {
    return pi * radius * radius;
  }}
void main() {
  print(MathUtils.pi);  // 输出 3.14159
  final area = MathUtils.calculateArea(2);  // 计算半径为2的圆的面积
  print(area);  // 输出 12.56636}

 

在上述示例中,MathUtils类中定义了一个静态变量pi和一个静态方法calculateArea。我们可以直接通过类名访问静态变量和调用静态方法。


带你读《深入浅出Dart》十、更多特性(2)https://developer.aliyun.com/article/1349051?groupCode=tech_library

相关文章
|
11月前
|
JSON 监控 JavaScript
Swagger UI 本地主机教程: 如何在本地使用 Swagger UI?
Swagger UI 提供在线和离线版本,但由于各种原因,你可能需要在本地使用 Swagger UI。 在本文中,我们将向你展示如何在本地使用 Swagger UI。
|
测试技术 uml
【比较】活动图和状态图
前言: 活动图和状态图都是UML图中的动态图,描述了对象在系统中从一个阶段到另一个阶段的活动。这两张图都比较简单,就不再赘述了,简单概括如下:
496 0
【比较】活动图和状态图
|
弹性计算 人工智能 编解码
【产品动态】阿里云弹性计算产品月刊-3月
第八代ECS g8i启动公测、第八代AMD实例g8a开放邀测、智能化运维工具 ECS Insight 发布;ECI类型的伸缩组支持容器的增量更新、资源中心支持全局资源搜索和管理;云上自动化运维最佳实践;无影云桌面免费试用3个月……更多前沿云产品动态,尽在弹性计算产品月刊。
【产品动态】阿里云弹性计算产品月刊-3月
|
Docker 容器 Shell
|
Android开发 存储 开发工具
|
11天前
|
人工智能 安全 Linux
【OpenClaw保姆级图文教程】阿里云/本地部署集成模型Ollama/Qwen3.5/百炼 API 步骤流程及避坑指南
2026年,AI代理工具的部署逻辑已从“单一云端依赖”转向“云端+本地双轨模式”。OpenClaw(曾用名Clawdbot)作为开源AI代理框架,既支持对接阿里云百炼等云端免费API,也能通过Ollama部署本地大模型,完美解决两类核心需求:一是担心云端API泄露核心数据的隐私安全诉求;二是频繁调用导致token消耗过高的成本控制需求。
5611 14