日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

從Flutter范兒的單例來看Dart的構造函數

來源: 責編: 時間:2024-05-07 09:03:56 212觀看
導讀單例模式單例模式應該是設計模式中使用的最廣泛的一種設計模式了,在Kotlin中,甚至為它單獨創建了一個語法糖——object類,來快速實現單例模式,而在Dart中,并沒有像Kotlin這樣的語法糖,所以,參考單例的一般實現,我們可以很容易

單例模式

單例模式應該是設計模式中使用的最廣泛的一種設計模式了,在Kotlin中,甚至為它單獨創建了一個語法糖——object類,來快速實現單例模式,而在Dart中,并沒有像Kotlin這樣的語法糖,所以,參考單例的一般實現,我們可以很容易的實現下面這樣一個單例。Esx28資訊網——每日最新資訊28at.com

class Singleton {  static Singleton? _instance;  // 私有的命名構造函數  Singleton._private() {    // TODO  }  static Singleton getInstance() {    if (_instance == null) {      _instance = Singleton._private();    }    return _instance!;  }}

上面的代碼與大部分編程語言的代碼都差不多,不外乎就是單例的幾個特點:Esx28資訊網——每日最新資訊28at.com

  • 私有構造函數
  • 靜態instance訪問

在Dart中,變量和函數前面加上「_」就代表私有,但這個私有實際上的含義是「只能在當前文件中訪問」,所以,如果在當前文件中,你依然是可以訪問這個私有變量或者函數的。另外,由于Dart是單線程模型,所以也不存在線程安全的問題,不用做線程控制。Esx28資訊網——每日最新資訊28at.com

上面的代碼,作為一個Dart初學者來說,是無可厚非的,但是對于老司機來說,明顯沒有Flutter范兒,所以,我們借助Dart的語法糖,來改造下上面的單例代碼。Esx28資訊網——每日最新資訊28at.com

class Singleton {  static Singleton? _instance;  // 私有的命名構造函數  Singleton._private() {    // TODO  }  static Singleton get instance => _instance ??= Singleton._private();}

首先,通過「??=」來簡化空判斷,其次,通過get函數來獲取實例,將instance函數變成了instance變量。這樣一來,代碼簡化了不少,而且也更加簡單了。Esx28資訊網——每日最新資訊28at.com

不過,這依然不是最具Flutter范兒的單例寫法,在Dart中,它提供了一個factory關鍵字,與Kotlin中的object關鍵字,有異曲同工之妙,我們來看看官方推薦的單例寫法。Esx28資訊網——每日最新資訊28at.com

class Singleton {  static final Singleton _singleton = Singleton._internal();  factory Singleton() => _singleton;  Singleton._internal() {    // TODO  }}

?所謂的factory constructor,它的作用是「僅在第一次創建實例,后續都返回相同的實例」,這不就是天然的單例嗎,所以,借助factory constructor,我們可以很方便的寫出一個Flutter范兒的單例。Esx28資訊網——每日最新資訊28at.com

構造函數

構造函數是一個類在初始化時,主動調用的函數,在Dart中,有多種不同的構造函數,它們在不同的場景下使用,可以極大的簡化我們的代碼,同時也讓我們的代碼更加具有Flutter范兒。Esx28資訊網——每日最新資訊28at.com

默認構造函數

缺省構造函數不用自己創建,如果一個類沒有構造函數,那么它會自動添加一個,它什么都不做。Esx28資訊網——每日最新資訊28at.com

// Default Constructorclass Test {  String name = 'xys';  Test();}

在構造函數中初始化變量

Dart提供了多種不同的方式在構造函數中未變量賦值,其中最簡單的,就是在構造時初始變量。Esx28資訊網——每日最新資訊28at.com

// Constructor with parametersclass Test {  String name;  Test(this.name);}

其實Test(this.name)實際上就是Test(String name){this.name = name}的簡化寫法。Esx28資訊網——每日最新資訊28at.com

同時,構造函數也可以增加方法體,進行一些初始化邏輯。Esx28資訊網——每日最新資訊28at.com

// Constructor with the initial methodclass Test {  String name;  Test(this.name) {    // TODO  }}

?當你需要在構造函數初始化時給變量賦值時,可以通過initializer list來實現。Esx28資訊網——每日最新資訊28at.com

// Constructor with initializerclass Test {  String name;    Test(name) : name = handleSth(name);    static String handleSth(String e) => e.toUpperCase();}

initializer list可以初始化多個變量,它們之間可以使用「,」進行分隔,如果有super構造器,那么它一般放在最后。Esx28資訊網——每日最新資訊28at.com

如果你要override基類的變量,那么可以通過super關鍵字來覆寫。Esx28資訊網——每日最新資訊28at.com

// Constructor with super()class Base {  String id;  Base(this.id);}class Test extends Base {  String name;  Test(this.name, String id) : super(id);}

另外,構造函數中,還支持通過Asserts?來做一些檢查。Esx28資訊網——每日最新資訊28at.com

// Constructor with assertionclass Test {  String name;  Test(this.name) : assert(name.length > 3);}

對于Dart的參數來說,通常我們設置的都是必選參數,就是類似我們上面的這些參數,而在Dart中,還可以設置可選參數。Esx28資訊網——每日最新資訊28at.com

class Test {  String name;  Test(this.name, [int sex = 0]);}Test('xys', 1);

或者你覺得可選參數在使用時的語義不太明確,那么你可以使用具名參數。Esx28資訊網——每日最新資訊28at.com

class Test {  String name;  Test(this.name, {int sex = 0});}Test('xys', sex: 1);

這樣在使用時,語義會更加明確。Esx28資訊網——每日最新資訊28at.com

私有構造函數

私有構造函數,除了我們前面提到的單例使用場景外,下面這個場景,也使用的很多。Esx28資訊網——每日最新資訊28at.com

class Utils {  Utils._();  static void log(String message) => print(message);}

通過私有構造函數,我們可以避免使用者創建工具類的實例,而是讓使用者直接調用靜態函數。Esx28資訊網——每日最新資訊28at.com

具名構造函數

具名構造函數可以給當前的構造邏輯起一個別名,方便調用者通過語義來進行調用。Esx28資訊網——每日最新資訊28at.com

// Constructor with this()class Test {  String name;  int sex;  Test(this.name, this.sex);  Test.boy(String name) : this(name, 1);  Test.girl(String name) : this(name, 0);}

const構造函數

const構造函數在Flutter中使用的非常多,因為一個const構造函數是不可變的,const構造函數在運行時會指向內存空間的同一個對象,從而提高代碼執行的效率,所以,在Flutter中,如果一個Widget是可以定義為const的,那就把它定義為const吧。Esx28資訊網——每日最新資訊28at.com

factory構造函數

factory constructor前面我們已經講解過了,它可以從另一個構造函數,或者是其它類,返回一個唯一的實例。最常用的場景就是單例的使用,我們來看下它的另一個使用場景,即從緩存中返回唯一實例。Esx28資訊網——每日最新資訊28at.com

class Test {  final String name;  static final _cache = <String, Test>{};  Test._(this.name);  factory Test(name) => _cache[name] ??= Test._(name);}

factory構造函數與static method的區別

在大部分時間,這兩者都是非常類似的,甚至是可以混用的,但是它們之間,還是有一些區別的。Esx28資訊網——每日最新資訊28at.com

對于factory constructor來說,它不需要命名,也不用指定通用參數,這樣可以減少很多模板代碼,我們來看下面這個例子。Esx28資訊網——每日最新資訊28at.com

class ComplexClass<Value, Notifier extends ValueNotifier<Value>> {}

在這個例子中,它包含一個比較復雜的泛型,如果我們要創建一個靜態工廠,那么就需要這樣:Esx28資訊網——每日最新資訊28at.com

class ComplexClass<Value, Notifier extends ValueNotifier<Value>> {  static ComplexClass<Value, Notifier> someFactory<ComplexClass<Value, Notifier extends ValueNotifier<Value>>() {    // TODO: return a ComplexClass instance  }}

我們需要創建很復雜的參數類型,但是使用factory constructor,則可以避免這些模板代碼。Esx28資訊網——每日最新資訊28at.com

class ComplexClass<Value, Notifier extends ValueNotifier<Value>> {  factory ComplexClass.someFactory() {    // TODO: return a ComplexClass instance  }}


Esx28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-86976-0.html從Flutter范兒的單例來看Dart的構造函數

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 用Go語言做了一個分布式限流器, 看看實現的方法與步驟

下一篇: C++強制類型轉換詳解:四種操作符解析與實例演示

標簽:
  • 熱門焦點
  • 5月iOS設備性能榜:M1 M2依舊是榜單前五

    和上個月一樣,沒有新品發布的iOS設備性能榜的上榜設備并沒有什么更替,僅僅只有跑分變化而產生的排名變動,剛剛開始的蘋果WWDC2023,推出的產品也依舊是新款Mac Pro、新款Mac Stu
  • 把LangChain跑起來的三個方法

    使用LangChain開發LLM應用時,需要機器進行GLM部署,好多同學第一步就被勸退了,那么如何繞過這個步驟先學習LLM模型的應用,對Langchain進行快速上手?本片講解3個把LangChain跑起來
  • 服務存儲設計模式:Cache-Aside模式

    Cache-Aside模式一種常用的緩存方式,通常是把數據從主存儲加載到KV緩存中,加速后續的訪問。在存在重復度的場景,Cache-Aside可以提升服務性能,降低底層存儲的壓力,缺點是緩存和底
  • 谷歌KDD'23工作:如何提升推薦系統Ranking模型訓練穩定性

    谷歌在KDD 2023發表了一篇工作,探索了推薦系統ranking模型的訓練穩定性問題,分析了造成訓練穩定性存在問題的潛在原因,以及現有的一些提升模型穩定性方法的不足,并提出了一種新
  • 微信語音大揭秘:為什么禁止轉發?

    大家好,我是你們的小米。今天,我要和大家聊一個有趣的話題:為什么微信語音不可以轉發?這是一個我們經常在日常使用中遇到的問題,也是一個讓很多人好奇的問題。讓我們一起來揭開這
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對帶有指定屬性的 HTML 元素設置樣式。可以為擁有指定屬性的 HTML 元素設置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡單而
  • 小米MIX Fold 3下月亮相:今年唯一無短板的全能折疊屏

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都有新的進展,其中榮耀、三星都已陸續發布了最新的折疊屏旗艦,尤其號榮耀Magi
  • 與兆芯合作 聯想推出全新旗艦版筆記本電腦開天N7系列

    聯想與兆芯合作推出全新聯想旗艦版筆記本電腦開天 N7系列。這個系列采用兆芯KX-6640MA處理器平臺,KX-6640MA 處理器是采用了陸家嘴架構,16nm 工藝,4 核 4 線
  • 三翼鳥智能家居亮相電博會,讓用戶體驗更真實

    2021電博會在青島國際會展中心開幕中,三翼鳥直接把“家”搬到了現場,成為了展會的一大看點。這也是三翼鳥繼9月9日發布了行業首個一站式定制智慧家平臺后的
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲蜜桃精久久久久久久| 在线观看三级视频欧美| 欧美日韩一区二区三区在线| 欧美日韩在线视频一区| 国产精品亚洲综合| 在线观看成人网| 亚洲精品欧洲| 亚洲视频综合在线| 午夜在线一区二区| 欧美wwwwww| 国产精品一区二区男女羞羞无遮挡| 国产亚洲精品美女| 亚洲理论在线观看| 欧美一区视频| 欧美精品日韩一区| 国产日韩欧美亚洲一区| 亚洲精品一二| 久久国产色av| 欧美另类视频| 国产一区欧美日韩| 亚洲裸体在线观看| 久久国产视频网| 欧美日韩一区在线视频| 黄色成人精品网站| 亚洲一区二区三区色| 蜜臀久久久99精品久久久久久| 国产精品卡一卡二卡三| 亚洲国产日日夜夜| 久久国产手机看片| 欧美午夜寂寞影院| 亚洲黄色影院| 欧美在线高清视频| 欧美三级视频在线播放| 精品电影一区| 亚洲欧美一区在线| 欧美美女bbbb| 影音先锋亚洲精品| 午夜精品www| 欧美日韩高清不卡| 影音先锋日韩精品| 午夜精品久久99蜜桃的功能介绍| 欧美国产综合一区二区| 激情综合激情| 欧美一级二区| 欧美四级电影网站| 91久久国产精品91久久性色| 欧美在线观看一二区| 欧美网站大全在线观看| 亚洲片国产一区一级在线观看| 久久精品国产视频| 国产精品揄拍500视频| 一区二区日韩欧美| 欧美精品自拍偷拍动漫精品| 在线观看国产精品淫| 欧美在线观看天堂一区二区三区| 国产精品高潮视频| 99亚洲精品| 欧美黑人多人双交| 亚洲国产精品久久久久秋霞不卡 | 欧美日韩综合久久| 亚洲电影下载| 久久性色av| 国内外成人在线| 欧美一区免费视频| 国产乱码精品一区二区三区忘忧草| 一区二区激情小说| 欧美三日本三级三级在线播放| 91久久在线播放| 欧美不卡三区| 亚洲国产欧美日韩| 欧美不卡高清| 亚洲欧洲美洲综合色网| 欧美不卡视频| 亚洲人成亚洲人成在线观看图片| 嫩草国产精品入口| 亚洲韩国青草视频| 欧美成人影音| 亚洲人线精品午夜| 欧美精品久久天天躁| 亚洲精品一区二区三区四区高清 | 国产精品捆绑调教| 亚洲影院高清在线| 国产精品毛片a∨一区二区三区|国 | 国内外成人在线| 久久精品欧洲| 精品69视频一区二区三区| 久久久久久亚洲精品不卡4k岛国| 红桃视频亚洲| 久久综合九色综合欧美就去吻| 亚洲国产精品国自产拍av秋霞| 你懂的成人av| 日韩视频免费观看高清在线视频| 欧美日韩国产精品一区| 一区二区三区视频在线| 国产精品v欧美精品v日韩精品| 亚洲影音一区| 国产一本一道久久香蕉| 麻豆成人综合网| 日韩午夜电影| 国产精品久久久久久久久久久久久久 | 亚洲高清视频一区| 欧美精品亚洲精品| 亚洲无线观看| 国产日韩精品在线观看| 久久久亚洲影院你懂的| 91久久中文| 国产精品igao视频网网址不卡日韩| 亚洲综合视频网| 激情综合在线| 欧美精品尤物在线| 亚洲欧美日韩国产精品| 黄色日韩网站视频| 欧美日本三级| 午夜欧美电影在线观看| 亚洲电影第1页| 欧美色视频日本高清在线观看| 欧美一区国产一区| 亚洲欧洲免费视频| 国产精品入口麻豆原神| 久久亚洲不卡| 一区二区欧美精品| 国产在线播放一区二区三区| 欧美大色视频| 午夜久久影院| 亚洲高清电影| 国产精品久久网站| 久久综合久色欧美综合狠狠| 亚洲视频碰碰| 精品成人在线观看| 欧美日韩中文字幕| 久久香蕉国产线看观看av| 亚洲天堂偷拍| 亚洲国产日韩欧美综合久久 | 亚洲电影在线播放| 国产精品二区在线| 久久综合伊人77777蜜臀| 亚洲一区黄色| 亚洲国产欧美一区| 国产日本欧美一区二区三区在线| 欧美91福利在线观看| 亚洲欧美日韩久久精品| 91久久久久久国产精品| 国产亚洲人成网站在线观看| 欧美日韩xxxxx| 久久精品一区二区三区不卡| 亚洲视频免费观看| 亚洲高清不卡| 国产视频久久| 欧美日韩亚洲一区| 老司机成人在线视频| 亚洲欧美日韩在线综合| 亚洲精品一区二区三区不| 黄色一区三区| 国产精品乱码人人做人人爱| 欧美激情第五页| 久久久国产精品亚洲一区 | 精品99一区二区| 国产精品入口麻豆原神| 欧美精品97| 久久影视精品| 欧美一区二区高清| 亚洲视频播放| 亚洲精品国产欧美| 有码中文亚洲精品| 国产日韩在线一区二区三区| 国产精品video| 欧美日本不卡高清| 免费在线成人| 久久精视频免费在线久久完整在线看| 亚洲影视在线播放| 中文国产成人精品久久一| 亚洲国产欧美日韩精品| 黄色日韩在线| 国产一区美女| 国产日韩亚洲欧美精品| 国产精品久久久久国产a级| 欧美日韩免费在线观看| 欧美激情影音先锋| 欧美二区在线播放| 欧美 日韩 国产在线| 久久免费视频一区| 久久久久国产精品麻豆ai换脸 | 欧美午夜寂寞影院| 欧美视频精品在线| 欧美人与禽猛交乱配| 欧美高清视频www夜色资源网| 久久尤物视频| 久久综合九色99| 久久综合图片| 久色婷婷小香蕉久久| 久久婷婷丁香| 免费看的黄色欧美网站| 美乳少妇欧美精品| 葵司免费一区二区三区四区五区| 久久一区二区三区超碰国产精品| 久久久免费精品| 久久一区二区三区av| 老司机精品视频一区二区三区| 久久综合精品国产一区二区三区| 久久综合综合久久综合| 欧美不卡一区| 欧美激情亚洲| 欧美美女视频| 欧美体内she精视频|