(
1
)、通過(guò)顯式地指定一個(gè)類來(lái)創(chuàng)建對(duì)象
?
。
?
在創(chuàng)建對(duì)像是指定類名將使你受特定實(shí)現(xiàn)的約束而不是特定接口的約束,這會(huì)使未來(lái)的變化更加復(fù)雜,要避免這種情況,應(yīng)該間接地創(chuàng)建對(duì)像,此時(shí)考慮:
? Abstract Factory
、
Factory Method
、
Prototype
?
(
2
)、對(duì)特殊操作的依賴。當(dāng)你為請(qǐng)求指定一個(gè)特殊地操作時(shí),完成該請(qǐng)求的方式就固定下來(lái)了,為了避免把請(qǐng)求代碼寫死,可以在編譯或運(yùn)行時(shí)刻很方便地改變響應(yīng)請(qǐng)求的方式。此時(shí)考慮:
? Chain of Responsibility ?
,
Command
?
(
3
)、對(duì)硬件和軟件平臺(tái)的依賴。外部的
OS
接口和應(yīng)用編程接口(
API
)在不同的軟硬件平臺(tái)上是不同的,依賴于特定平臺(tái)的軟件將很難移稙到其它平臺(tái)上,甚至很難跟上本地平臺(tái)的更新,所以設(shè)計(jì)系統(tǒng)時(shí)限制其平臺(tái)相關(guān)性就很重要了。此時(shí)考慮:
Abstract Factory? , Bridge
?
(
4
)、對(duì)對(duì)像表示或?qū)崿F(xiàn)的依賴。
知道對(duì)像怎樣表示、保存、定位或?qū)崿F(xiàn)的客戶在對(duì)像發(fā)生變化時(shí)可能也需要變化,阻止連鎖變化的辦法就是對(duì)客戶隱藏這些變化。此時(shí)考慮:
Abstract Factory
、
Bridge
、
Memento
、
Proxy
?
(
5
)、算法依賴。算法在開(kāi)發(fā)和復(fù)用時(shí)常常被擴(kuò)展、優(yōu)化和替代。依賴于某個(gè)特定算法的對(duì)像在算法發(fā)生變變化時(shí)不得不變化。因此有可能發(fā)生變化的算法應(yīng)該被孤立起來(lái)。此時(shí)考慮:
Builder
、
Iterator
、
Strategy
、
Template Method
、
Visitor
?
(
6
)、緊耦合。
緊耦合的類很難獨(dú)立地被復(fù)用,因?yàn)樗鼈兪腔ハ嘁蕾嚨摹>o耦合產(chǎn)生單快的系統(tǒng),要改變或刪掉一個(gè)類,必須理解和改變其它許多類。這樣的系統(tǒng)是一個(gè)很難學(xué)習(xí)、移稙和維護(hù)的密集體。
松散耦合提高了一個(gè)類本身被復(fù)用的可能性,并且系統(tǒng)更易于學(xué)習(xí)、移稙、修改和擴(kuò)展。設(shè)計(jì)模式使用抽象耦合和分層技術(shù)來(lái)提高系統(tǒng)的松散耦合性。此時(shí)考慮:
Abstract Factory
、
Command
、
Fa?ade
、
Mediator
、
Observer
,
Chain of Responsibility
?
(
7
)、通過(guò)擴(kuò)充子類來(lái)擴(kuò)充功能。
通常很難通過(guò)定制子類來(lái)定制對(duì)像,每一個(gè)新類都有固定的實(shí)現(xiàn)開(kāi)銷(初始化,終止處理等),定義子類還需要對(duì)父類有深入的了解,如,重定義一個(gè)操作可能需要重定義其它操作,并且子類方法會(huì)導(dǎo)致類爆炸,因?yàn)榧词箤?duì)于一個(gè)簡(jiǎn)單的擴(kuò)充,你也不得不引入許多新的子類。
一般的對(duì)像組合技術(shù)和委托技術(shù),是繼承之外組合對(duì)像行為的另一種靈活的方法,新的功能可以通過(guò)新的方式組合已有對(duì)像,而不是通過(guò)定義已經(jīng)存在的類的子類的方式加到應(yīng)用中去,另一方面,過(guò)多使用對(duì)像組合會(huì)使設(shè)計(jì)難于理解。許多設(shè)計(jì)模式產(chǎn)生的設(shè)計(jì)中,你可以定義一個(gè)子類,且將它的實(shí)例和已存在的實(shí)例進(jìn)行組合來(lái)引入定制的功能。設(shè)計(jì)模式:
Bridge
,
Chain of Responsibility
,
Composite
,
Decorator
,
Observer
,
Strategy
。
?
(
8
)、不能方便地對(duì)類進(jìn)行修改。
?
有時(shí)候不得不改變一個(gè)難以修改的類,也許你需要而已沒(méi)有(商業(yè)類庫(kù)),或許可能對(duì)類的任何改變會(huì)要求修改許多已存在的其它子類,設(shè)計(jì)模式提供在這些情況下對(duì)類進(jìn)行修改的方法。
Adapter
,
Decorator
,
Visitor