l 同一個廚師,可能每次炒的菜味道不同!html
l 但全國各地的肯德基,味道都幾乎一個味???java
思考:算法
1) 爲何我每次吃到的菜,味道都不同?到底菜被什麼控制了?設計模式
2) 爲何肯德基的快餐誰作都一個樣?這些快餐又被什麼控制了?spa
3) 哪一種控制方式更符合設計模式裏提到的原則?符合什麼原則? ——依賴倒轉原則設計
將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。建造者模式使用多個簡單的對象一步一步構建成一個複雜的對象。code
在軟件系統中,有時候面臨着"一個複雜對象"的建立工做,其一般由各個部分的子對象用必定的算法構成;因爲需求的變化,這個複雜對象的各個部分常常面臨着劇烈的變化,可是將它們組合在一塊兒的算法卻相對穩定,這就須要用到建造者模式。它將一個複雜的構建與其表示相分離,使得一樣的構建過程能夠建立不一樣的表示。htm
一些基本部件不會變,而其組合常常變化的時候。對象
需求:blog
畫王八!
class Turtle { public void paint() { System.out.println("頭。。。"); System.out.println("身體。。。"); System.out.println("殼。。。"); System.out.println("腿。。。"); System.out.println("尾巴。。。"); } }
新加需求:畫日本王八!
class JapanTurtle { public void paint() { System.out.println("頭。。。"); System.out.println("身體。。。"); System.out.println("腿,,。,"); System.out.println("尾巴。。。"); } }
哎呀很差,忘了加殼了。。。
class JapanTurtle { public void paint() { System.out.println("頭。。。"); System.out.println("身體。。。"); System.out.println("殼。。。");//忘了,後來加上的 System.out.println("腿,,。,"); System.out.println("尾巴。。。"); } }
顯然這種方式已經不合理了!
class Turtle { public void paint() { paintHead(); paintBody(); paintShell(); paintLeg(); paintTail(); } private void paintTail() { System.out.println("尾巴。。。"); } private void paintShell() { System.out.println("殼。。。"); } private void paintLeg() { System.out.println("腿。。。"); } private void paintBody() { System.out.println("身體。。。"); } private void paintHead() { System.out.println("頭。。。"); } }
這裏的paint方法起到了「指揮者」(Director)的做用,若是王八缺胳膊少腿了(雖然王八也沒胳膊),必定是指揮者的問題,找他就完事了。或者王八進化了,不須要殼了?!找指揮者把殼那一部分去掉就完事了。
抽象工廠模式實現對產品家族的建立,一個產品家族是這樣的一系列產品:具備不一樣分類維度的產品組合,採用抽象工廠模式則是不須要關心構建過程,只關心什麼產品由什麼工廠生產便可。而建造者模式則是要求按照指定的藍圖建造產品,它的主要目的是經過組裝零配件而產生一個新產品,二者的區別仍是比較明顯的。 ——https://www.cnblogs.com/ChinaHook/p/7471736.html
我以爲這段說的挺好的。。。(手動滑稽)
其實總結一下就是兩句話:
多的我也總結不出來了,畢竟仍是太菜。。。(手動滑稽)