iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
Mobile Development

Android Studio 30天進階學習系列 第 2

Android Studio30天進階學習-DAY02_Dependency injection(依賴注入)

  • 分享至 

  • xImage
  •  

Dependency injection(簡稱DI)是一種軟體設計模式的一種,目前在Android Studio編寫的套件中有幾個就是DI,像是我後面會說到的Dagger2、Hilt,這兩個都是DI架構的工具套件。

DI敘述

依賴注入是讓物件之間的依賴關係降低耦合程度,高耦合的物件關係會在之後重建或修改程式碼時會有"牽一髮而動全身"的效果,所以依賴注入可以提高程式碼的可重複利用性。

例子說明

這邊先舉兩個類別 AB ,當一個類別 B 要使用到另一個類別 A 的方法時,在沒有建立任何架構的情況下會使用直接呼叫並且使用new的方式來取得。

  • 這邊以房子做舉例
    https://ithelp.ithome.com.tw/upload/images/20230913/20150370n8CmOEnS2T.png
  1. 組成Window的原料有玻璃材質和塑膠材質

    • glass.class
    public class Glass {
        public Glass() {
        }
    
        public void glass() {
            Log.e("TAG", "glass OK");
        }
    }
    
    • plastic.class
    public class plastic {
        public plastic() {
        }
    
        public void plastic() {
            Log.e("TAG", "plastic OK");
        }    
    }
    
    • Window.class
    public class Window {
        private Glass glass;
        private plastic plastic;
    
        public Window(Glass glass, plastic plastic) {
            this.glass = glass;
            this.plastic = plastic;
        }
    
        public void printWindow() {
            Log.e("TAG", "printWindow: Window OK");
            glass.glass();
            plastic.plastic();
        }
    }
    
  2. 組成Door的原料有木頭材質

    • wood.class
    public class wood {
        public wood() {
        }
    
        public void wood() {
            Log.e("TAG", "wood OK");
        }
    }
    
    • Door.class
    public class Door {
        private wood wood;
    
        public Door(wood wood) {
            this.wood = wood;
        }
    
        public void printDoor() {
            Log.e("TAG", "printDoor: Door OK");
            wood.wood();
        }
    }
    
  3. 最後注入Window和Door組成House

    • House.class
    public class House {
        private Window window;
        private Door door;
    
        public House(Window window, Door door) {
            this.window = window;
            this.door = door;
        }
    
        public void printHouse() {
            Log.e("TAG", "House OK");
            window.printWindow();
            door.printDoor();
        }
    }
    
  • MainActivity.class
public class MainActivity extends AppCompatActivity {
    private Glass glass = new Glass();
    private plastic plastic = new plastic();
    private wood wood = new wood();
    private Door door = new Door(wood);
    private Window window = new Window(glass, plastic);
    private House house = new House(window, door);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // ...省略

        house.printHouse();
    }
}
  • 因為我是在Android Studio操作,所以只在MainActivty上new House的物件並取得House的方法,這會進入House的類別中取得Door和Window的方法,並分別進入Door和Window取得各自組成材料的方法

架構圖

https://ithelp.ithome.com.tw/upload/images/20230912/20150370JD77kg9zmF.png

結果輸出

https://ithelp.ithome.com.tw/upload/images/20230913/20150370inCBS3xUie.png

以上是我今天的Dependency injection(DI)的文章,明天會開始進入Dagger2套件的說明,我大致會分成3個部分進行說明、各註解標的意思與作用、架構實作。


上一篇
Android Studio30天進階學習-DAY01_概述以及各個主題的前言敘述
下一篇
Android Studio 30天進階學習-DAY03_Dagger2_01(架構說明與常見註解標籤)
系列文
Android Studio 30天進階學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言