mixin很難嗎?

What is mixin?

實踐類工做常常會遇到這樣的問題,有些概念會用不會說,最近在學習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,彷佛都不夠;定義一個後端程序員類BackEndDeveloperFullStackDeveloper來繼承,又是魚和熊掌不可兼得的問題,畢竟單繼承機制不給你這個想象空間。編程語言

因此,這種時候就得換個思路了。用mixin來聲明一種混入,爲了不形成困擾,咱不叫它BackEndDeveloper而命名爲高階能力Zhuangbility,將一組新的技能混入FrontEndDeveloper,而後就能夠聲明前端程序員出身、帶有高階能力,既能寫代碼又會玩弄數據庫的FullStackDeveloper了。ide

> dart main.dart ↙
寫代碼講究的是情懷
大不了老子刪庫跑路
相關文章
相關標籤/搜索