(十四)橋接模式詳解(都市異能版)

魔都國貿附近,某天夜裏十一點半。java

               那一晚,魔都出奇的沒有作只打雷不下雨的勾當,老天彷佛是要將魔都淹沒通常,傾盆大雨像不要命似的拍打着地面。設計模式

               漆黑的夜幕中,一道黑影從一個十字路口狂奔而出,而就在此時,一輛紅色寶馬急速穿過,一瞬間,黑影就猶如被巨力拋飛通常騰空而起,直到幾秒鐘後,才重重的摔落在車前足足二十多米處。app

               「吱...茲....」eclipse

               一聲淒厲的剎車聲劃破了魔都的長空。this

               以後,一個身材高挑的女子,慌忙的從車中奔跑到黑影落下的地方,或許是因爲看到倒下之人滿身鮮血的模樣,女子嚇的不由發出一聲驚叫後退了幾步,愣是咬着牙遲遲不敢上前。spa

               或許是因爲慌亂之下失了神,女子後退的時候,差點被一個物體絆倒。女子低頭一看,居然是一隻拖鞋,不知爲什麼,看到這一幕,一時間女子的心緒穩定了很多。.net

               待得情緒穩定之後,女子這纔再次意識到本身撞到人了,而此人到如今還不知死活。因而女子急忙再次跑到黑影身旁,開始試圖叫醒這位被本身撞傷的路人,而因爲此時一直是大雨傾盆,被撞之人身上的鮮血已經被沖刷乾淨,女子也漸漸的看清了黑影的面貌。設計

               此人看起來年紀不大,穿着一條大褲衩和一條普通的黑色T恤,光着兩個腳丫子,五官倒還算端正,只是滿臉的青春痘將其僅有的一點英俊所有淹沒,不過今後人光着的腳丫子就能夠看出,剛纔地上的拖鞋應該就是此人被撞飛的鞋子了。code

               久久嘗試叫醒傷者未果以後,女子無奈之下,只好使出渾身的力氣才堪堪拖動此人,等到將受傷之人拖入車中以後,女子其實已經累的滿身大汗,只是在這風雨交加的夜晚,看不出來罷了。對象

               

               XX醫院急救室。

               「你說什麼?死了?」女子瞪大着一雙晶瑩的眼珠,難以想象的凝視着眼前宣佈結果的醫生。

               此時,在燈光的照耀下,纔看清女子的面貌,女子穿着一身白色蕾絲連衣裙,一雙眼睛簡直像浸在水中的水晶同樣澄澈,膚色晶瑩如玉,薄薄的脣,色淡如水,清秀的五官裏透露出一種說不出的乖巧。並且因爲剛纔被大雨淋溼,女子的全身已經溼透,仔細看去,隱約可見其包裹在着裝以內的嫩膚,更是給本來就美到極點的女子添加了一份誘人的姿色。

               「是的,原本接上輸氧管後是有微弱的呼吸的,結果過了幾秒鐘以後就完全斷氣了,對不起,咱們已經盡力了。」醫生嘆息一聲說道,緊接着,醫生繼續說道:「這是他臨死前讓我給你的,請節哀吧」。說着,醫生便將手中的一張紙條遞給了女子,而快接觸到女子玉手的時候,醫生忍不住吞了口口水,顯然是被女子的美色驚到了。

               女子在聽完醫生的宣判以後,差點暈倒在地,幸虧離座位很近,因此才一屁股作到了座位上,不至於摔倒。呆呆的望着正在被緩緩的推往太平間的急救車,女子有點不知所措,她到如今甚至都不知道本身撞死之人姓誰名誰。

               想起剛纔醫生說的話,女子這才意識到手中握着的紙條,打開一看,女子的表情瞬間凝固了,只見紙條上歪歪曲曲的寫着幾個字:你TM踩着我輸氧管了。

             

                XX醫院太平間。

                「尼瑪,二貨醫生,老子用盡了生前的力量,才勉強寫了那麼幾個字。這蠢貨也不打開看看,居然覺得我是臨死前寫給女朋友的小情書,也不想一想,老子命都快沒了, 還寫毛毛情書啊。再說,看我這屌絲樣,外面那女神能是我女朋友嗎。我真是去年買了個表。」 罵罵咧咧的聲音從太平間中傳來,這要是被他人聽到了,估計當場就要被嚇昏過去。

                只見一我的影從急救牀上緩緩的坐起來,使人驚奇的是,此人居然生生的穿過了鋪在身上的白布,看上去就像是此人不存在通常。坐起的一人,正是被剛纔的貌美女子撞死之人,而此人,正是加班到深夜的小左。

                「貌似老子轉生了啊,就是這身體咋跟個魂兒似的,徹底沒有實體感啊。難道讓我就這樣天天飄來飄去的,我擦。」看着本身幾乎透明的身體,小左沒有時間爲本身的死後轉生所興奮,而是緊皺着眉頭開始琢磨本身的身體。

                 

                「啊哈,我擁有異能了啊,這簡直是太TM逆天了。」小左研究了將近三個小時,終於發現了本身的異常。然而在發現本身居然神奇的擁有了異能以後,小左已然壓抑不住心裏的興奮,在太平間裏大喊大叫,徹底不顧身邊沉睡的衆人們。

                不過興奮只持續了片刻,小左便眉頭緊皺,一臉悶悶不樂的樣子,由於他的面前站着八個小左,是的,八個。

                小左在研究之後發現,他是擁有異能沒錯,並且能夠轉換成屌絲和高富帥的形象,可是讓人抓狂的是,他必須先分離出屌絲和高富帥的分身,而後才能由這兩個分身,再次分離出帶有異能的屌絲和高富帥形象的分身,這些異能分別都有隱身,飛行以及讀心術,並且一個分身同時只能有一種能力。因此這樣兩兩組合,最後就出現了八個小左,分別是純屌絲和高富帥分身,以及擁有一種異能的三個屌絲分身,以及分別擁有一種異能的三個高富帥分身。

                不過使人欣喜的是,這八個分身都是真真實實的實體,或者說他們除了有特殊能力以外,其實和現實中的人類是如出一轍的,尤爲是具備屌絲模樣的分身,徹底和身前的小左如出一轍。不太小左變成高富帥之後的樣子,卻是真的很帥,長眉若柳,身如玉樹,本來坑坑窪窪的臉龐一時間也光滑嫩白,比之女生也絲絕不差。想必就這個樣子,除非是與小左特別熟悉的人,才能仔細的從這分身當中看出一絲似曾相識的感受。

                只是目前這種狀況雖然說有意外的驚喜,但小左仍然以爲十分糟糕。

                緣由就是,他要是想使用帶有異能的分身,則至少須要創造兩次分身,一次無技能的屌絲或者高富帥分身,一次則是在此基礎上分離出帶有異能的分身。還有更致命的一點,就是若是之後正在使用某一個技能的分身,而恰巧在關鍵時刻須要使用當前異能以外的兩個的話,則須要臨時替換掉分身,而替換一個分身,則至少須要兩次分身的分離。要知道,分身的產生但是至關耗時的,雖然說也不長,但十分八分的,仍是要的。

                「不知道這種狀況,能不能用設計模式解決呢?」哪怕是死後轉生,思惟方式依舊沒有變化。前世身爲程序猿的小左,在轉生後遇到問題時,第一時間想到的,居然是設計模式。

                說幹就幹,小左收起八個分身,便控制着本身飄忽的身體開始尋找電腦,由於必需要有電腦,才能激發本身的設計靈感。

                尋找的途中,小左也發現,別人居然徹底看不到本身,不過這其實早在小左的意料之中。至於緣由,用腳趾頭都能想的明白,都已經變成魂魄了,還能看見個毛啊。

                因爲此時已至深夜,因此醫院所剩的工做人員寥寥無幾,憑藉着能夠穿透一切實物的身體,小左很輕易的就找到了一個無人的辦公室。不過當小左按下電腦開機鍵的時候,居然發現本身的手直接穿過了機箱。

                「靠!」憤怒的爆了聲粗口,無奈之下,小左只好暫時將本身不帶異能的屌絲分身給招了出來,用來幫本身操做電腦。

                

                在通過半個多小時左右的捯飭以後,小左已經在機子上安裝好了JDK以及eclipse。因而沒有任何猶豫,小左就開始模擬剛纔本身的狀況。

                「剛纔的狀況來看,我本身的靈魂體以及八個分身,很明顯應該是一個繼承體系。而個人靈魂體,就是這個繼承體系的超級父類。不過因爲靈魂體沒有實體,因此作成抽象的可能更合適點。不過我能夠先來個簡單的類圖看一下他們的關係。」小左一邊自言自語,一邊已經開始了在電腦上勾畫類圖。


                 「畫出類圖果真更加清晰一點,這是一個標準的簡單的繼承體系,下面我就用代碼來嘗試着寫一下吧。」說着,小左便開始在鍵盤上敲打着代碼。

[java] view plaincopyprint?

  1. package com.bridge;  

  2. //抽象靈魂類  

  3. public abstract class Soul {  

  4.   

  5.     public void createDoppelganger(){  

  6.         System.out.println("製做分身");  

  7.     }  

  8.       

  9. }  

package com.bridge;
//抽象靈魂類
public abstract class Soul {

	public void createDoppelganger(){
		System.out.println("製做分身");
	}
	
}

[java] view plaincopyprint?

  1. package com.bridge;  

  2. //屌絲分身  

  3. class Loser extends Soul{  

  4.       

  5.     public Loser(){  

  6.         System.out.println("製造一個無技能的屌絲分身");  

  7.     }  

  8.       

  9.     public void doAllLikePeople(){  

  10.         System.out.println("分身能夠像正常人同樣作任何事");  

  11.     }  

  12.       

  13.     public void show(){  

  14.         System.out.println("展現屌絲形象");  

  15.     }  

  16.       

  17. }  

  18. //高富帥分身  

  19. class TRH extends Soul {  

  20.       

  21.     public TRH(){  

  22.         System.out.println("製造一個無技能的高富帥分身");  

  23.     }  

  24.   

  25.     public void doAllLikePeople(){  

  26.         System.out.println("分身能夠像正常人同樣作任何事");  

  27.     }  

  28.       

  29.     public void show(){  

  30.         System.out.println("展現高富帥形象");  

  31.     }  

  32.       

  33. }  

package com.bridge;
//屌絲分身
class Loser extends Soul{
	
	public Loser(){
		System.out.println("製造一個無技能的屌絲分身");
	}
	
	public void doAllLikePeople(){
		System.out.println("分身能夠像正常人同樣作任何事");
	}
	
	public void show(){
		System.out.println("展現屌絲形象");
	}
	
}
//高富帥分身
class TRH extends Soul {
	
	public TRH(){
		System.out.println("製造一個無技能的高富帥分身");
	}

	public void doAllLikePeople(){
		System.out.println("分身能夠像正常人同樣作任何事");
	}
	
	public void show(){
		System.out.println("展現高富帥形象");
	}
	
}

[java] view plaincopyprint?

  1. package com.bridge;  

  2. //帶有隱身技能的屌絲分身  

  3. class InvisibleLoser extends Loser{  

  4.       

  5.     public InvisibleLoser(){  

  6.         System.out.println("製造一個帶隱身技能的屌絲分身");  

  7.     }  

  8.   

  9.     public void releaseSkills(){  

  10.         System.out.println("屌絲分身釋放隱身技能");  

  11.     }  

  12. }  

  13. //帶有飛行技能的屌絲分身  

  14. class VolantLoser extends Loser{  

  15.       

  16.     public VolantLoser(){  

  17.         System.out.println("製造一個帶飛行技能的屌絲分身");  

  18.     }  

  19.   

  20.     public void releaseSkills(){  

  21.         System.out.println("屌絲分身釋放飛行技能");  

  22.     }  

  23. }  

  24. //帶有讀心術技能的屌絲分身  

  25. class ReadMindLoser extends Loser{  

  26.       

  27.     public ReadMindLoser(){  

  28.         System.out.println("製造一個帶讀心術技能的屌絲分身");  

  29.     }  

  30.   

  31.     public void releaseSkills(){  

  32.         System.out.println("屌絲分身釋放讀心術技能");  

  33.     }  

  34. }  

  35. //帶有隱身技能的高富帥分身  

  36. class InvisibleTRH extends TRH{  

  37.       

  38.     public InvisibleTRH(){  

  39.         System.out.println("製造一個帶隱身技能的高富帥分身");  

  40.     }  

  41.   

  42.     public void releaseSkills(){  

  43.         System.out.println("高富帥分身釋放隱身技能");  

  44.     }  

  45. }  

  46. //帶有飛行技能的高富帥分身  

  47. class VolantTRH extends TRH{  

  48.       

  49.     public VolantTRH(){  

  50.         System.out.println("製造一個帶飛行技能的高富帥分身");  

  51.     }  

  52.   

  53.     public void releaseSkills(){  

  54.         System.out.println("高富帥分身釋放飛行技能");  

  55.     }  

  56. }  

  57. //帶有讀心術技能的高富帥分身  

  58. class ReadMindTRH extends TRH{  

  59.       

  60.     public ReadMindTRH(){  

  61.         System.out.println("製造一個帶讀心術技能的高富帥分身");  

  62.     }  

  63.   

  64.     public void releaseSkills(){  

  65.         System.out.println("高富帥分身釋放讀心術技能");  

  66.     }  

  67. }  

package com.bridge;
//帶有隱身技能的屌絲分身
class InvisibleLoser extends Loser{
	
	public InvisibleLoser(){
		System.out.println("製造一個帶隱身技能的屌絲分身");
	}

	public void releaseSkills(){
		System.out.println("屌絲分身釋放隱身技能");
	}
}
//帶有飛行技能的屌絲分身
class VolantLoser extends Loser{
	
	public VolantLoser(){
		System.out.println("製造一個帶飛行技能的屌絲分身");
	}

	public void releaseSkills(){
		System.out.println("屌絲分身釋放飛行技能");
	}
}
//帶有讀心術技能的屌絲分身
class ReadMindLoser extends Loser{
	
	public ReadMindLoser(){
		System.out.println("製造一個帶讀心術技能的屌絲分身");
	}

	public void releaseSkills(){
		System.out.println("屌絲分身釋放讀心術技能");
	}
}
//帶有隱身技能的高富帥分身
class InvisibleTRH extends TRH{
	
	public InvisibleTRH(){
		System.out.println("製造一個帶隱身技能的高富帥分身");
	}

	public void releaseSkills(){
		System.out.println("高富帥分身釋放隱身技能");
	}
}
//帶有飛行技能的高富帥分身
class VolantTRH extends TRH{
	
	public VolantTRH(){
		System.out.println("製造一個帶飛行技能的高富帥分身");
	}

	public void releaseSkills(){
		System.out.println("高富帥分身釋放飛行技能");
	}
}
//帶有讀心術技能的高富帥分身
class ReadMindTRH extends TRH{
	
	public ReadMindTRH(){
		System.out.println("製造一個帶讀心術技能的高富帥分身");
	}

	public void releaseSkills(){
		System.out.println("高富帥分身釋放讀心術技能");
	}
}

             「恩,個人靈魂體以及這幾個分身的關係卻是挺簡單粗暴,就是繼承,那麼如今這種狀況下我在使用的時候,應該就像下面這樣了。」

[java] view plaincopyprint?

  1. package com.bridge;  

  2.   

  3. public class Use {  

  4.   

  5.     public static void main(String[] args) {  

  6.         InvisibleLoser invisibleLoser = new InvisibleLoser();  

  7.         invisibleLoser.releaseSkills();  

  8.         System.out.println("------------------------------------");  

  9.         ReadMindTRH readMindTRH = new ReadMindTRH();  

  10.         readMindTRH.releaseSkills();  

  11.         System.out.println("------------------------------------");  

  12.         InvisibleTRH invisibleTRH = new InvisibleTRH();  

  13.         invisibleTRH.releaseSkills();  

  14.     }  

  15.       

  16. }  

package com.bridge;

public class Use {

	public static void main(String[] args) {
		InvisibleLoser invisibleLoser = new InvisibleLoser();
		invisibleLoser.releaseSkills();
		System.out.println("------------------------------------");
		ReadMindTRH readMindTRH = new ReadMindTRH();
		readMindTRH.releaseSkills();
		System.out.println("------------------------------------");
		InvisibleTRH invisibleTRH = new InvisibleTRH();
		invisibleTRH.releaseSkills();
	}
	
}


                  看着輸出的結果,小左搖了搖頭,自言自語道:「果真與我剛纔的分析如出一轍,每次切換技能的時候,都至少須要製造兩次分身,才能夠切換成功,這樣的話,切換技能很是不方便。並且萬一之後我又領悟一個技能,又或者增長了一種外貌,那麼分身的數量會急劇增長。」

                  「那麼到底什麼設計模式能夠解決這個問題呢?」小左喃喃的說道。

                  在說話的同時,小左已經開始在度娘上搜索合適的設計模式,試圖解決本身的分身問題。

                  「有了,啊哈。橋接模式正是解決這個問題的利器啊。」小左猶如發現了新大陸通常興奮的叫道,而雙眼則死死的盯着橋接模式的定義。

                  定義:在軟件系統中,某些類型因爲自身的邏輯,它具備兩個或多個維度的變化,那麼如何應對這種「多維度的變化」?如何利用面嚮對象的技術來使得該類型可以輕鬆的沿着多個方向進行變化,而又不引入額外的複雜度?這就要使用Bridge模式。而具體使用的方式,則是將抽象部分與他們的實現部分分離,使得它們均可以獨立的變化。

                  「橋接模式中說到了某些類型,會有兩個或多個維度的變化,這裏指的不正是個人分身嗎。個人分身既能夠按外貌分類,即屌絲和高富帥,又能夠按技能分類,即隱身、飛行和讀心術。不過這使用方式卻是說的有些模糊。」小左看着橋接模式的定義,喃喃的說道。

                  「仍是看下類圖吧,說不定能找到一些端倪。」說着,小左就在度娘上打開了橋接模式的類圖。


                  「從類圖上看,抽象部分的具體行爲交給了實現部分,而就我目前的狀況來講,個人不一樣實現有兩種,一種是外貌,一種是技能。這麼說的話,抽象部分和實現部分,一般意義下,應該指的是繼承體系中,接口相同而實現也相同的部分則爲抽象部分,而接口相同可是實現不一樣的部分則爲實現部分。」

                  「這樣的話,按照我目前的狀況,製做分身以及像正常人同樣作任何事的方法則是抽象部分,而形象的展現和技能的釋放則是實現部分了。下面我就嘗試着來分離一下吧,哈哈!」有了解決方案,小左不由心情大好,慌里慌張的就開始嘗試着分離抽象和實現部分。

                  「首先,我要將實現部分給寫出來,這裏有兩個維度,一個是技能,一個是外貌。」

[java] view plaincopyprint?

  1. package com.bridge;  

  2.   

  3. //技能接口  

  4. public interface Skills {  

  5.       

  6.     public void releaseSkills();  

  7.   

  8. }  

  9.   

  10. //隱身技能  

  11. class Invisible implements Skills{  

  12.   

  13.     public void releaseSkills(){  

  14.         System.out.println("釋放隱身技能");  

  15.     }  

  16. }  

  17. //飛行技能  

  18. class Volant implements Skills{  

  19.   

  20.     public void releaseSkills(){  

  21.         System.out.println("釋放飛行技能");  

  22.     }  

  23. }  

  24. //讀心術技能  

  25. class ReadMind implements Skills{  

  26.   

  27.     public void releaseSkills(){  

  28.         System.out.println("釋放讀心術技能");  

  29.     }  

  30. }  

package com.bridge;

//技能接口
public interface Skills {
	
	public void releaseSkills();

}

//隱身技能
class Invisible implements Skills{

	public void releaseSkills(){
		System.out.println("釋放隱身技能");
	}
}
//飛行技能
class Volant implements Skills{

	public void releaseSkills(){
		System.out.println("釋放飛行技能");
	}
}
//讀心術技能
class ReadMind implements Skills{

	public void releaseSkills(){
		System.out.println("釋放讀心術技能");
	}
}

[java] view plaincopyprint?

  1. package com.bridge;  

  2. //外貌接口  

  3. public interface Appearance {  

  4.       

  5.     public void show();  

  6.   

  7. }  

  8. //屌絲外形  

  9. class Loser implements Appearance{  

  10.   

  11.     public void show() {  

  12.         System.out.println("展現屌絲形象");  

  13.     }  

  14.       

  15. }  

  16. //高富帥外形  

  17. class TRH implements Appearance{  

  18.   

  19.     public void show() {  

  20.         System.out.println("展現高富帥形象");  

  21.     }  

  22.       

  23. }  

package com.bridge;
//外貌接口
public interface Appearance {
	
	public void show();

}
//屌絲外形
class Loser implements Appearance{

	public void show() {
		System.out.println("展現屌絲形象");
	}
	
}
//高富帥外形
class TRH implements Appearance{

	public void show() {
		System.out.println("展現高富帥形象");
	}
	
}

                「這即是兩個實現化的部分了,如今我已經將它分離出來,剩下的就是要將他們加入到靈魂基類中了。」

[java] view plaincopyprint?

  1. package com.bridge;  

  2. //抽象靈魂類  

  3. public abstract class Soul {  

  4.       

  5.     protected Appearance appearance;//外貌  

  6.       

  7.     protected Skills skills;//技能  

  8.   

  9.     //具體的實現交給實現部分處理  

  10.     public void show(){  

  11.         appearance.show();  

  12.     }  

  13.     //具體的實現交給實現部分處理  

  14.     public void releaseSkills(){  

  15.         skills.releaseSkills();  

  16.     }  

  17.       

  18.     public void createDoppelganger(){  

  19.         System.out.println("製做分身");  

  20.     }  

  21.     //抽象的方法,留給分身實現  

  22.     public abstract void doAllLikePeople();  

  23.       

  24.     public Soul() {  

  25.         super();  

  26.     }  

  27.       

  28.     public Soul(Skills skills) {  

  29.         super();  

  30.         this.skills = skills;  

  31.     }  

  32.   

  33.     public Soul(Appearance appearance) {  

  34.         super();  

  35.         this.appearance = appearance;  

  36.     }  

  37.   

  38.     public Soul(Appearance appearance, Skills skills) {  

  39.         super();  

  40.         this.appearance = appearance;  

  41.         this.skills = skills;  

  42.     }  

  43.   

  44.     public Appearance getAppearance() {  

  45.         return appearance;  

  46.     }  

  47.   

  48.     public void setAppearance(Appearance appearance) {  

  49.         this.appearance = appearance;  

  50.     }  

  51.   

  52.     public Skills getSkills() {  

  53.         return skills;  

  54.     }  

  55.   

  56.     public void setSkills(Skills skills) {  

  57.         this.skills = skills;  

  58.     }  

  59.   

  60. }  

package com.bridge;
//抽象靈魂類
public abstract class Soul {
	
	protected Appearance appearance;//外貌
	
	protected Skills skills;//技能

	//具體的實現交給實現部分處理
	public void show(){
		appearance.show();
	}
	//具體的實現交給實現部分處理
	public void releaseSkills(){
		skills.releaseSkills();
	}
	
	public void createDoppelganger(){
		System.out.println("製做分身");
	}
	//抽象的方法,留給分身實現
	public abstract void doAllLikePeople();
	
	public Soul() {
		super();
	}
	
	public Soul(Skills skills) {
		super();
		this.skills = skills;
	}

	public Soul(Appearance appearance) {
		super();
		this.appearance = appearance;
	}

	public Soul(Appearance appearance, Skills skills) {
		super();
		this.appearance = appearance;
		this.skills = skills;
	}

	public Appearance getAppearance() {
		return appearance;
	}

	public void setAppearance(Appearance appearance) {
		this.appearance = appearance;
	}

	public Skills getSkills() {
		return skills;
	}

	public void setSkills(Skills skills) {
		this.skills = skills;
	}

}

                「這下已經基本搞定了,最後一步則是我要修正一下靈魂類,由於靈魂類只是定義了抽象化的角色,它是須要分身類來修正之後,才能夠擁有真正的像人類同樣活動的能力。」

[java] view plaincopyprint?

  1. package com.bridge;  

  2.   

  3. //分身類  

  4. public class Doppelganger extends Soul{  

  5.       

  6.     public Doppelganger(){  

  7.         System.out.println("製做一個暫無外貌和技能的分身");  

  8.     }  

  9.   

  10.     public void doAllLikePeople(){  

  11.         System.out.println("分身能夠像正常人同樣作任何事");  

  12.     }  

  13.   

  14. }  

package com.bridge;

//分身類
public class Doppelganger extends Soul{
	
	public Doppelganger(){
		System.out.println("製做一個暫無外貌和技能的分身");
	}

	public void doAllLikePeople(){
		System.out.println("分身能夠像正常人同樣作任何事");
	}

}

                「OK了,這下我來看一下如今要使用的話要怎麼使用吧。」到了此時,小左明顯已經有點火燒眉毛了。

[java] view plaincopyprint?

  1. package com.bridge;  

  2.   

  3. public class Use {  

  4.   

  5.     public static void main(String[] args) {  

  6.         Soul soul = new Doppelganger();  

  7.         soul.setAppearance(new TRH());//設置分身外貌爲高富帥  

  8.         soul.setSkills(new Invisible());//設置隱身技能  

  9.         soul.doAllLikePeople();  

  10.         System.out.println("----------------------------");  

  11.         soul.show();  

  12.         soul.releaseSkills();  

  13.         System.out.println("----------------------------");  

  14.         //切換技能  

  15.         soul.setSkills(new ReadMind());  

  16.         soul.releaseSkills();  

  17.         System.out.println("----------------------------");  

  18.         //切換外貌  

  19.         soul.setAppearance(new Loser());  

  20.         soul.show();  

  21.         System.out.println("----------------------------");  

  22.         //切換技能  

  23.         soul.setSkills(new Volant());  

  24.         soul.releaseSkills();  

  25.     }  

  26.       

  27. }  

package com.bridge;

public class Use {

	public static void main(String[] args) {
		Soul soul = new Doppelganger();
		soul.setAppearance(new TRH());//設置分身外貌爲高富帥
		soul.setSkills(new Invisible());//設置隱身技能
		soul.doAllLikePeople();
		System.out.println("----------------------------");
		soul.show();
		soul.releaseSkills();
		System.out.println("----------------------------");
		//切換技能
		soul.setSkills(new ReadMind());
		soul.releaseSkills();
		System.out.println("----------------------------");
		//切換外貌
		soul.setAppearance(new Loser());
		soul.show();
		System.out.println("----------------------------");
		//切換技能
		soul.setSkills(new Volant());
		soul.releaseSkills();
	}
	
}


                「不錯不錯。這下我能夠隨意切換外貌和技能了,並且要是之後萬一我領悟什麼新的技能,按照之前的方式的話,我至少須要添加兩個子類,而要是擁有新的外貌的話,則至少須要添加四個子類,而如今的話,無論是那種狀況,我都只須要添加一個子類,就能夠隨意切換。」

                「不過提及來的話,這好處應該不止這些,我仍是專門總結和對比一下吧,免得之後使用的時候碰見什麼問題,本身搞不清楚。」

                轉生以後,小左仍是改不掉前世的習慣,在每次使用設計模式解決完問題以後,都喜歡總結一番。而在世之時,小左的這個習慣,則全是爲了在小甜甜面前得瑟所養成的。

                「先畫個類圖來看一下如今的關係。」說着,小左便開始畫起類圖來了。


                「這圖當中,紅色的則是抽象部分,黃色的則是實現部分,而二者之間被兩條線鏈接,看起來就像是一座橋同樣,怪不得這個設計模式叫橋接模式呢。」看着本身畫出來的類圖,小左突然以爲,橋接模式這個名字,起的實在是妙。

                「下面,我就得總結一下先後的好處和壞處了。」

                首先,得先總結一下之前的壞處都是哪些。

                第一,分身太多,不容易控制。

                第二,不一樣技能和不一樣外貌之間,切換起來很是不靈活。

                第三,要是想添加技能或者外貌的分類的話,要產生的分身很是多。

                要是從專業點的角度來分析的話,則應該是下面這幾點了。

                第一,子類太多。

                第二,因爲客戶端與具體子類的耦合度很高,致使在子類間切換很是繁瑣。

                第三,若是之後須要擴展子類功能的話,則子類的數目會隨着維度以及每個維度中子類的個數的增長呈幾何倍數增加。

                那麼如今的好處則是一下幾點了。

                第一,分身的數目減小了,並且伴隨着技能和外貌的種類的增長,這種減小會愈來愈明顯。

                第二,在不一樣技能和不一樣外貌之間的切換將會很是靈活。

                第三,若是之後技能和外貌的種類增長了,又或者分身又能夠按其它的屬性分類了,那麼這種添加會很是容易。

                若是把好處說的專業一點的話,則是下面這樣。

                第一,子類的數目減小了。

                第二,實現部分的切換很是容易,主要表如今抽象部分和實現部分的耦合度很低,由於使用聚合取代了繼承。

                第三,擴展的時候很簡單,能夠更好的容納變化,不管是維度的增長仍是每個維度中子類的個數的增長,都會變得很是簡單。

                

                瘋狂的總結了一番,小左便開始按照橋接模式的設計,嘗試着改變對外貌和技能的控制。

                果真,在嘗試了數十次以後,一個普通的分身終於被小左給分離了出來,而小左的靈魂中則保存着屌絲和高富帥的外貌以及三種異能。

                伴隨着小左的意念變更,這個普通的分身則會產生響應的變化。忽而是屌絲模樣,忽而又變成了高富帥的樣子,忽而隱形不見,忽而飛出窗外,又迅速的飛回原地,實在是讓小左玩的不亦樂乎。

                

                一年後,魔都某天橋。

                「天靈靈,地靈靈,看相算命我最行,上知天文,下知地理,中間明白事理,並且通曉人理,想算命的請找小左先生算命啦。」一個身材高大,長相英俊的小夥子,賣着力氣的叫喊着。

                此人,正是開啓了讀心術的小左,而之因此變成如今這樣,則是由於隱身和飛行雖然很酷,但卻恰恰不能拿來賺錢。無奈之下,小左只好委曲求全,先暫時當起了算命先生。說是這麼說,但實際上小左如今天天賺的錢,是之前當程序猿時的數倍不止。

                此時的他,更是華麗麗的披了一身高富帥的形象,爲的就是多吸引幾個女顧客。不過這一招還真的至關湊效,已經有很多穿着暴露,性感火辣的女顧客來光顧了小左的生意。

                這不,說着說着,一位穿着火紅短裙的性感辣妹已然來到了小左攤前,「帥哥先生,麻煩你幫我看下,個人命中有沒有你呢?」

                「我要收攤了,很差意思。」感覺到對方明顯的勾引,小左並無任何觸動。而此時恰好也正值傍晚,因而小左只是淡漠的擺了擺手,就打算收攤回家。

                這一年中,前世作了二十多年單身屌絲的小左,在擁有了飛行和隱身的異能以後,天然是好好的享受了一番人間樂趣,故而如今縱然是面對這種程度的勾引,小左依然能夠作到無動於衷。而之因此變成這樣,不光是由於這一年之中,小左對女人的定力大大增長,最重要的是,面前的女人一看就是隻調戲不掏錢的主。

                然而就在小左準備轉身回家的時候,倒是被身後一道輕柔的聲音給叫住了。

                「您好,能夠給我算一下嗎?」

                聽到有人叫,小左就打算回頭婉拒以後直接回家,然而就在小左轉過身來,看到面前女子的時候,小左卻猶如被雷擊通常,楞在那裏一動不動。片刻以後,才顫抖的說道:「你...你就是...」

相關文章
相關標籤/搜索