開關的誕生
話說在一個緊耦合的世界,有一個名為tmfc的工匠,一天,他發明了一個叫做開關的的裝置。他琢磨了老半天,決定把開關裝在自己的床頭,這樣他就不用在睡前起床去拔電燈的電線了(這可是個緊耦合的世界啊),tmfc對自己的發明非常滿意。
class Switch{
Light light;
public void Switch(Light l){
light = l;
}
public void TurnOn(){
light.On();
}
public void TurnOff(){
light.Off();
}
}
tmfc發明了開關的事情很快在他的朋友圈中傳了開來,大家都對這個好東西非常感興趣,一個朋友的朋友的朋友,電風扇廠的老闆,聽說了這個訊息之後興奮的馬上開著他的BMW(傳說中的“別摸我”)來到tmfc的住處表示願意用此車來交換一個能裝在他們的風扇上的開關。 tmfc雖然對這位朋友沒什麼好感,但是名車的誘惑還是難擋,於是他爽快的答應了下來,過了兩天(這兩天中,tmfc花了一天半開車到處去兜風^_^),老闆就拿到了非常好用的風扇開關。
class FanSwitch{
Fan fan;
public void FanSwitch(Fan f){
fan = f;
}
public void TurnOn(){
fan.On();
}
public void TurnOff(){
fan.Off();
}
}
基板和介面
電風扇廠的技師們沒費多大力氣就把開關裝在了風扇上,風扇推出後及其的受歡迎,老闆朋友很快買了新款的Benz,而tmfc也由於發明開關而變得名聲大噪,來自全國各地的合作請求絡繹不絕,tmfc很快便厭倦了重複的生產(已經不能稱這種行為為設計了)不同開關的生活,作為一個聰明人(同時也是一個懶人),他很自然的想到了“為什麼我不設計一種通用的開關呢?”。沒過多久(當然,他是聰明人嘛!)tmfc有了這樣的設計:
abtract class AbstractSwitch{
abstract public void TurnOn();
abstract public void TurnOff();
}
他對所有的客戶展示了他那優雅而簡潔的設計,他聲稱只要客戶的產品從簡單的使用AbstractSwitch基板作為他們產品的基板,就可以非常容易的擁有開關的功能,而不必在這裡等待他一個個的完成不同的開關產品。“我們的產品已經有基板了,而我們使用的流水線不支援多基板!!”,“我們的產品非常小,無法使用這麼大的基板!!”,“使用基板我們的成本提高了一倍!!”,對於這個方案,客戶們顯然十分不滿。面對這個結果,tmfc顯得有些意外,但是作為一個優秀工匠(也許我們應該現在應該稱他為工程師了),他很快就拿出了更好的解決方案。
Interface ISwitchable{
On();
Off();
}
class InterfaceSwitch{
ISwitchable target;
public void InterfaceSwitch(ISwitchable t){
target = t;
}
public void TurnOn(){
t.On();
}
public void TurnOff(){
t.Off();
}
}
這次,不需要使用基板,只要增加一個額外的和開關之間的介面就可以在裝置上使用開關了,“這下大家滿意了吧!”tmfc邊咕噥著邊給客戶們示範了他的新設計。不出所料,大部分的客戶感到很滿意,雖然需要額外的介面,但還在介面還算便宜,體積也非常的小巧。大部分的客戶都愉快的拿著開關和介面走了(剩下那些不是很滿意的為了不惹惱它們這個世界上唯一能給他們開關的人,也不得不拿著介面和開關回去想辦法說服老闆接受這個方案),tmfc也重新開始了開著BMW兜風的日子。