dart设计模式之单例模式

举报
坚果的博客 发表于 2021/08/07 07:29:35 2021/08/07
【摘要】 单例模式这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。模式分析单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。模式解决问题控制实例数目,节省系统资源。保证该类只有一个实...

单例模式

这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

模式分析

  1. 单例类只能有一个实例。
  2. 单例类必须自己创建自己的唯一实例。
  3. 单例类必须给所有其他对象提供这一实例。

模式解决问题

  1. 控制实例数目,节省系统资源。
  2. 保证该类只有一个实例,多处共享

优点

  1. 内存中只有一个实例,减少了内存开销,尤其是频繁创建和销毁实例
  2. 避免对资源的多重占用
  3. 保证全局唯一实例从而保证实例状态一致

缺点

  1. 没有接口,不能继承
  2. 大量使用也会导致内存泄漏

模式应用场景

  1. 要求生产唯一序列号。
  2. WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
  3. 创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。

模式代码

class _SingleTon {
  _SingleTon._();
  //第一种方式调用
  factory _SingleTon() {
    return instance;
  }
  //第二种方式调用
  static _SingleTon instance = _SingleTon._();
  int count = 0;
}
​
class RunSingleTon implements Run {
  @override
  main() {
    print('单例模式创建');
    print(_SingleTon().count++);
    print(_SingleTon.instance.count++);
    print(_SingleTon.instance.count++);
  }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。