Java 介面 – (Java教學) – 介面就是類別的接口, 就好像在電插一樣, 不同的電器有同一類與電力的接口.
為何需要介面
- 要編程就像一個布局, 當引用一個class時, 會引用不同的method, property. 如果method的class可以轉換, 就大大簡化了編程. 就像電器的例子一樣, 電器必需要有一個統一的介面來連接電源, 要不是的話, 如果每個不同電器的插頭也不同的話, 必然會引致需要不同類型的接頭, 造成大量的不便, 統一插頭, 接頭的話, 就可大大減少了不便與麻煩.
- 就是把多個不同類別, 事項, 但有相似的method的類別作批次處理.
- 在工作實務中, 不同的System, Database, Rest API, Datatable,Class都可能會不同。運用介面, 可以把Class 加進一個出口 (method), 計算CLASS 內的LOGIC再劃一導出. 如有在有些的大公司, 政府部門內, 用的database都可不同, 假設有兩個database, 一個為mysql, 一個為sql server, 假如我要把資料放進不同的資料庫內, 我就可以定立相同的method介面, 在內才call 相關的DB API.
- 就算邏輯完全不同, 我們也可以把介面的method強加下去的. 例如, 如果我有兩個類別, 一個為冷氣, 一個為水果, 我可以把第三個的用法或處理方法加下去, 如我想在schedule內排序清洗, 就可加入method(Clear()), 內裏的logic也可不同(清法不同). 而也有一些比較普及的, 如存儲存是的ToJson, Console.writeline時的ToString等. 而這不只在OOP, 就算是在DDD, MVC等也可使用.
介面使用一覽表
本篇會介紹 Interface 介面 的基本用法. 結合 for loop, if, Array, Collection, Interface, Inherit等, 可重用當中 Block內的Code. 以下會舉一個簡單的生活例子 ( Inherit 繼承 ), 及一個工作上的例子 ( Interface 介面 ), 以供各位參考:
Interface: |
interface AccountList{ double Calculation(); void LoadItemsFromDB(); } |
Implement Class: |
import java.util.ArrayList; class PurchasingList implements AccountList{ private ArrayList<PurchasingItem> items = new ArrayList<PurchasingItem>(); public void LoadItemsFromDB() { //******* }; public double Calculation() { int amount = 0; amount -= CalOrderCost(); amount -= CalOrderDeliveryCost(); return amount; }; private double CalOrderCost() { //******* }; private double CalOrderDeliveryCost() { //******* }; } |
Implement Class: |
class InventoryList implements AccountList{ private ArrayList<InventoryItem> items = new ArrayList<InventoryItem>(); public void LoadItemsFromDB() { //******* }; public double Calculation(){ int amount = 0; amount -= CalOrderInventoryFees(); amount -= CalOrderMaintanceFees(); return amount; }; private double CalOrderInventoryFees() { //******* }; private double CalOrderMaintanceFees() { //******* };} |
Implement Class: |
class SellingList implements AccountList{ private ArrayList<SellingItem> items = new ArrayList<SellingItem>(); public void LoadItemsFromDB() { //******* }; public double Calculation(){ int amount = 0; amount -= CalSellingCost(); amount += CalSellingGain(); amount -= CalOrderDeliveryCost(); return amount; }; private double CalSellingGain(){ //******* ; }; private double CalSellingCost(){ //******* ; }; private double CalOrderDeliveryCost(){ //******* ; }; } |
Main Class: |
class ExpenitureReport { //Running Point public void Run(){ double sum = 0; ArrayList<AccountList> accountLists = new ArrayList<AccountList>(); accountLists.add(new PurchasingList()); accountLists.add(new InventoryList()); accountLists.add(new SellingList()); for(AccountList item : accountLists){ item.LoadItemsFromDB(); } for(AccountList item : accountLists){ sum += item.Calculation(); } System.out.println(“Sum: ” + sum); } } |
注意事項 |
1) ExpenitureReport.Run 是入口首先把幾個 PurchasingList, SellingList, ExpenitureReport 的Instance放入List<AccountList>內 2) 用foreach 運行LoadItemsFromDB得到Data 3) 用foreach 運行Calculation得到總金頧Sum |
Interface: |
interface ImageFilter{ void Process(); void LoadPixels(); } |
Implements Class Master: |
class Blur implements ImageFilter{ public void FindPixelAverage(){ } public void FindNeignbour(){ } public void Process(){ FindPixelAverage(); FindNeignbour(); } public void LoadPixels(){ //************* } } |
Implements Class: |
class Sharpen implements ImageFilter{ public void GetEdge(){ } public void Blacken(){ } public void Process(){ GetEdge(); Blacken(); } public void LoadPixels(){ //************* } } |
Running Class: |
class ImageProcesser{ void Run(){ List<ImageFilter> filters = new List<ImageFilter>(); filters.Add(new Blur()); filters.Add(new Sharpen()); foreach(var filter in filters){ filter.LoadPixels(); filter.Process(); } SetPixels(filters ); } void SetPixels(List<ImageFilter> filters){ //****** } } |
注意事項 |
1) ImageProcesser.Run 是入口首先把幾個Blur, Sharpen 的 Instance 放入 List<ImageFilter>內 2) 用 foreach 運行 LoadPixel 把Pixel放入Filter 3) 用foreach 運行 Process 得到 計算 4) 最後SetPixels to Image. |
相關頁面:
Java 類別 – Class, Method, Inheritance, Interface的基礎用法
Java 繼承 – Inheritance 繼承 的基本用法 – 結合 for loop, if, Array, Collection作例子
參考網頁: https://docs.oracle.com/javase/tutorial/java/concepts/interface.html