
實踐類作業經常會遇到這樣的問題,有些概念會用不會說,最近在學習Dart,遇到mixin便是如此,讀了幾篇網文總覺得良莠不齊,一群碼友也說越讀越懵,索性靜下心來重新出發,一點一滴地弄明白,記錄下來分享給大家,咱不說別人文筆不好、也不多舉例子以至忘了初心,咱就看能不能以最直觀的示例和最直白的講解達到快速理解mixin的目的,
Mix in: (Phrasal Verb) Mix something in/with something. To add one substance to others, especially in cooking.
-- Oxford Advanced American Dictionary
Mix in本意主要是指烹飪時將一種東西混進另一種東西,比如打個雞蛋,放點兒鹽,一起攪,把這個概念搬到Dart這門單繼承的面向物件語言中來又是幾個意思呢?
根子就在單繼承上,這可以說是現代編程語言的“政治正確”,但它在帶來好處的同時也限制了想象空間,廢話少說,以碼服人:
abstract class DeveloperBase {
void code();
}
class FrontEndDeveloper extends DeveloperBase {
void code() => print('我在幫組里小姐姐寫代碼');
}
mixin Zhuangbility on FrontEndDeveloper {
@override
void code() => print('寫代碼講究的是情懷');
void operateDatabase() => print('大不了老子刪庫跑路');
}
class FullStackDeveloper extends FrontEndDeveloper with Zhuangbility {}
void main() {
FullStackDeveloper fullStackDeveloper = FullStackDeveloper();
fullStackDeveloper.code();
fullStackDeveloper.operateDatabase();
}
首先我們籠統地定義了一個程式員基類DeveloperBase,程式員寫程式,天經地義,沒啥好說的,然后我們基于DeveloperBase定義了只要有機會就喜歡幫小姐姐干活兒的前端程式員類FrontEndDeveloper,
現在,我們實際上就可以用FrontEndDeveloper來干活兒了,但是單就一個前端程式員,刷子畢竟不夠,假如我們需要一個能夠主持全面作業的全堆疊程式員,咋整?定義一個全堆疊程式員類FullStackDeveloper,不管它繼承自DeveloperBase還是FrontEndDeveloper,似乎都不夠;定義一個后端程式員類BackEndDeveloper讓FullStackDeveloper來繼承,又是魚和熊掌不可兼得的問題,畢竟單繼承機制不給你這個想象空間,
所以,這種時候就得換個思路了,用mixin來宣告一種混入,為了避免造成困擾,咱不叫它BackEndDeveloper而命名為高階能力Zhuangbility,將一組新的技能混入FrontEndDeveloper,然后就可以宣告前端程式員出身、帶有高階能力,既能寫代碼又會玩弄資料庫的FullStackDeveloper了,
> dart main.dart ↙ 寫代碼講究的是情懷 大不了老子刪庫跑路
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/185228.html
標籤:Dart
上一篇:double賦值給int
