flutter - 设计模式-单例模式

单例模式

效果: 单例模式.无论创建多少个实例,都只返回同一个实例. 只暴露你想暴露的公共成员和方法.(此处公共成员为:instanceVar,公共方法为instanceFun)

使用场景:一般是用在系统间各种模式的通信协调上或者在整个系统中只会使用一次的模块中.

dart-单例

准确来说,此单例模式是使用Dart编写,用 Dart作为标题更好,不过flutterDart是一家,不用分彼此。

import 'package:flutter/material.dart';

class Page extends StatelessWidget {
  final num id;
  Page3({Key key, this.id}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    // 创建实例
    MySingleton myObj1 = MySingleton(); // 返回单例

    // 再次创建实例
    MySingleton myObj2 = MySingleton(); // 返回单例
    
    print(myObj1 == myObj2); // 比较是否是听一个单例

    return Scaffold(body: Text('测试页面'));
  }
}

/// 单例模式.无论创建多少个实例,都只返回同一个实例
class MySingleton {
  num instanceVar;
  static num start;

  /// 非静态方法,通过实例创建后使用
  instanceFun() {
    return start;
  }
  /// 静态方法,直接通过类方法调用 MySingleton.instanceStaticFun()
  static instanceStaticFun() {
    return start;
  }
 
  /// MySingleton._internal() 在factory构造函数设置 start变量 后仅调用一次。
  static final MySingleton _singleton = new MySingleton._internal();

  /// 只有使用 static 标识的静态成员,才可以在factory函数中被赋值初始化.
  factory MySingleton(num startparam) {
    start = startparam;
    return _singleton;
  }

  MySingleton._internal() {
    if (instanceVar == null) {
      instanceVar = start;
    } else {
      instanceVar++;
    }
  }
}

// 无论如何初始化,取到的都是同一个对象
class MySingleton {
  static num age;


  // 工厂模式
  factory MySingleton() =>_getInstance();
  static MySingleton get instance => _getInstance();
  static MySingleton _instance;

  /// MySingleton._internal() 在factory构造函数运行后仅调用一次。
  MySingleton._internal() {
    // 初始化
  }
  
  static MySingleton _getInstance() {
    if (_instance == null) {
      _instance = new MySingleton._internal();
    }
    return _instance;
  }

  /// 非静态方法,通过实例创建后使用
  instanceFun() {
    return age;
  }
}

///调用
// MySingleton manager = new MySingleton();
// MySingleton manager2 = MySingleton.instance;

思考题

优化: 当我们创建单例时,就会立即执行初始化。如何做到创建时不执行初始化,只有使用时才初始化呢?

--------------如果文章对你有用,请右上角点赞/收藏,谢谢-------------

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值