Java 鬆綁 (一):利用多型鬆綁類別的依賴關係
在學習 OO 的過程中,很多前輩先進都會強調「鬆綁」的原則。所謂的鬆綁,就是把元件與元件之間依賴關係降到最低。鬆綁之後可以讓我們未來維護與擴充功能時,能夠更加的方便。為達成鬆綁原則,會充分利用 OOP 語言本身提供的機制來實作之,以 Java 為例,我們會利用多型來完成鬆綁的效果。
例如:我需要寫一個打招呼的程式,沒有考慮鬆綁原則時,可以這樣寫:
package org.cdchen.serviceloaders.apps; public class SayHelloMain { public static void main(String[] args) { System.out.println("Hello to cdchen."); } }
這樣的寫法非常的直接與單純,但卻產生了一個問題:如果以後要改用其他方式打招呼,就得重新修改程式,並且重新編譯才行。為此,我們可以考慮這樣做:
首先,定義一個名為 GreetingService 的 Interface:
package org.cdchen.serviceloaders; public interface GreetingService { void greeting(String who); }
GreetingService
介面中只定義實作的類別裡,必須要提供名為 greeting()
的方法,至於如何招呼的細節,則由實作的類別來完成。
例如,我定義了 HiGreetingService
與 HasEatingService
兩個類別,來實作 GreetingService
介面:
HiGreetingService:
package org.cdchen.serviceloaders.impls; import org.cdchen.serviceloaders.GreetingService; public class HiGreetingService implements GreetingService { public void greeting(String who) { System.out.println("Hi, " + who + "."); } }
HasEatingService:
package org.cdchen.serviceloaders.impls; import org.cdchen.serviceloaders.GreetingService; public class HasEatingService implements GreetingService { static { // 為了證明是動態載入,所以在這裡加上這個動作!! System.out.println("INFO: HasEatingService Loading!!"); } public void greeting(String who) { System.out.println(who + ", Has eating??"); } }
為了方便以後執行打招呼的動作,我又定義了 GreetingServiceUtil
類別:
package org.cdchen.serviceloaders.apps; import org.cdchen.serviceloaders.GreetingService; class GreetingServiceUtil { public static void callService(GreetingService service) { System.out.print("Class Name: " + service.getClass().getName()); System.out.print(", Message: "); service.greeting("cdchen"); } }
完成後,我們來看看主程式如何實作打招呼的動作 (StaticLoadingMain
):
package org.cdchen.serviceloaders.apps; import org.cdchen.serviceloaders.GreetingService; import org.cdchen.serviceloaders.impls.HasEatingService; public class StaticLoadingMain { public static void main(String[] args) { GreetingService service = new HasEatingService(); GreetingServiceUtil.callService(service); } }
這樣做的好處,在於未來如果更換原有問候吃飽沒的招呼動作,換成只說嗨時,我們只需要變更主程式的第 8 行:
GreetingService service = new HiGreetingService();
這樣是不是方便許多呢??
這篇內容的 Trackback 網址:
http://www.cdchen.idv.tw/trackback/1058
- cdchen 的 BLOG
- 如果想要發表回應,請先登入 或 註冊。