1. 程式人生 > >面向介面程式設計之粗暴理解

面向介面程式設計之粗暴理解

    我們可以將面向介面程式設計簡單理解為,從解決一件事擴充套件到解決一類事

案例原始碼在文章末尾,自取

為什麼會有介面一說?

    可能這麼說還比較抽象,那麼就用我們熟知的電腦做案例解釋下

圓孔滑鼠USB介面外設
        眾所周知,原始的滑鼠使用的是圓形的插口,可以理解為圓形的介面,如下程式碼

    public interface Circle{		
	void Connect();//圓孔滑鼠的連線功能
    }


    但圓形插口擴充套件性不好,只能支援滑鼠一種外設    其他裝置需要另外開闢介面,這樣下去遲早資源耗盡
    這時一堆dalao聚集在一起,約定了USB協議(介面)

    public interface USB{		
        void Connect();//USB裝置的連線功能
    }

    只要實現了USB介面的外接裝置,都可以通過USB被電腦所識別


    所以直接(在數不勝數的程式設計師和大牛在度過了的那一個個令人頭禿的凌晨後終於)有了面向介面程式設計的思想
    所以,只要物件實現了特定功能的介面,他就能通過該相同的介面完成各種各樣的事情

    直接的用途是,每出一件電腦外設,只要它遵循USB介面(協議),它就能連入電腦工作

    那麼問題來了,這和我們程式設計師有什麼關係呢?
    不知道大家發現沒有,這裡每一件外設只要遵循USB介面(協議)就能正常工作

    我們不用為每一件新出的外設單獨編寫程式了!!!

    關於外設是如何實現USB介面的,廠商以外的人是無法知道的,這是廠商所希望的

    這時,就實現了外設在電腦上工作和對USB介面實現的分離

    廠商的鐵飯碗保住了,程式設計師的工作量也有所減輕

故事講完了,下面開始上程式碼

using System;
namespace InterfaceExample
{
	//向上提取,得到大部分外設都遵守的USB介面(協議),只要外接實現該介面,就可以連入電腦
	public interface USB{		
		void Connect();//USB裝置的連線功能
	}
	
	public class Mouse : USB
	{
		//讓滑鼠遵循USB協議,實現滑鼠與電腦間連線和斷開的功能
		public void Connect()
		{	
			//這裡用一句輸出語句,模擬滑鼠實現USB介面的操作
			Console.WriteLine("滑鼠成功接入電腦!");
		}
	}
	
	public class Keyboard : USB
	{
		//讓鍵盤遵循USB協議,實現鍵盤與電腦間連線和斷開的功能
		public void Connect()
		{
			Console.WriteLine("鍵盤成功接入電腦!");
		}
	}
	
	//擴充套件到任意一個外接裝置
	public class OutDevice : USB{
		//這是任意一個外接裝置,它實現了USB介面
		public void Connect()
		{
			Console.WriteLine("外接裝置成功接入電腦!");
		}		
	}
	
//上面的這些就是外設生產商(鍵盤生產商、滑鼠生產商)的鐵飯碗
	
	
}

    生產商如何使外設實現USB介面的其他人都無法知道
    但是我們可以通過他們都實現了的USB介面來執行他們
    可以類比:把鍵盤和滑鼠USB插進電腦,就可以正常使用了!        

class USBInterface{
		
		//所以,這裡我們定義了一個將外設連線入電腦的功能
		public static void ConnectComputer(USB usb){
			usb.Connect();
		}
		
		public static void Main(string[] args)
		{
			//廠商生產了一個鍵盤一個滑鼠和一個任意外設
			Keyboard keyboard = new Keyboard();
			Mouse mouse = new Mouse();
			OutDevice outdevice = new OutDevice();
			
			//使用者通過USB介面將三個裝置連線入電腦
			ConnectComputer(keyboard);
			ConnectComputer(mouse);
			ConnectComputer(outdevice);
			
			Console.ReadLine();
			
		}
	}

這樣我們就將滑鼠鍵盤推廣到了任意的外設,只要外設實現了USB介面(協議),它就能和電腦建立聯絡,正常工作

最後引用某位網友的問答

1 首先什麼是面向介面程式設計?

面向介面程式設計就是先把客戶的業務邏輯線提取出來,作為介面,業務具體實現通過該介面的實現類來完成。
當客戶需求變化時,只需編寫該業務邏輯的新的實現類,通過更改配置檔案(例如Spring框架)中該介面
的實現類就可以完成需求,不需要改寫現有程式碼,減少對系統的影響。

2 面向介面程式設計的優點?

降低程式的耦合性。其能夠最大限度的解耦,所謂解耦既是解耦合的意思,它和耦合相對。耦合就是聯絡 ,耦合越強,聯絡越緊密。在程式中緊密的聯絡並不是一件好的事情,因為兩種事物之間聯絡越緊密,你更換 其中之一的難度就越大,擴充套件功能和debug的難度也就越大。
易於程式的擴充套件;
有利於程式的維護;

PS:為了內容理解的難易程度,請讀者不要糾結歷史細節問題

原始碼連結