看了網(wǎng)絡(luò)上很多關(guān)于設(shè)計(jì)模式的方法,有的模式看起來(lái)相似,但本質(zhì)還是區(qū)別很大的.像簡(jiǎn)單工廠,工廠方法和抽象工廠就有很明顯的區(qū)別. 有一個(gè)比較好理解的例子,在這跟大家介紹下: 1.如果一個(gè)后花園只種蔬菜類,那么就用簡(jiǎn)單工廠就可以了. 2.如果后花園蔬菜品種繁多.得用工廠方法才可以,把共有的東西抽象出來(lái). 3.如果要擴(kuò)大后花園的規(guī)模,比如一個(gè)在北方,一個(gè)在南方,這樣工廠方法就無(wú)法實(shí)現(xiàn)了,就應(yīng)當(dāng)用抽象工廠,把各種各樣的植物,又組成一個(gè)后花園. 所以我個(gè)人認(rèn)為,簡(jiǎn)單工廠是一個(gè)工廠只生產(chǎn)一類的產(chǎn)品,面對(duì)的是具體的類,工廠方法是可以生產(chǎn)不同的產(chǎn)品,把公共的方法抽象出來(lái),然后進(jìn)行創(chuàng)建各種各樣的產(chǎn)品.抽象工廠把幾種產(chǎn)品劃出共同的東西,把相互依賴的對(duì)象抽象出來(lái),只要實(shí)現(xiàn)這些接口就可以得到不同的產(chǎn)品. 具體例子: 1.簡(jiǎn)單工廠: using System; public interface ICar { void run(); } public class BMWCar : ICar { public void run() { Console.WriteLine("BMWCar run"); } } public class BenzCar : ICar { public void run() { Console.WriteLine("BenzCar run"); } } public class Driver { public static ICar DriverCar(string carType) { switch (carType) { case "BMWCar": return new BMWCar(); case "BenzCar": return new BenzCar(); default: throw new Exception(); } } } public class Client { public static void Main() { ICar myCar = Driver.DriverCar("BenzCar"); myCar.run(); Console.Read(); } } 心得:優(yōu)點(diǎn)是只要實(shí)現(xiàn)共有的接口就可以實(shí)現(xiàn)不同車跑的方式.但缺點(diǎn)就是要判斷哪一種車,造成要修改Driver 類 心得:優(yōu)點(diǎn)是符合了開(kāi)放-封閉原則(OCP),從整體上還看不出什么缺點(diǎn). 3.抽象工廠: } public class BenzBusinessCar : IBusinessCar Console.WriteLine("BenzSportCar run");
class Client } 心得:抽象方法似乎達(dá)到了完美境界.把開(kāi)奔馳的司機(jī)和開(kāi)寶馬的司機(jī)的公共方法抽象出來(lái),并對(duì)不同的司機(jī)創(chuàng)建不同的類,到時(shí)候不管是開(kāi)什么車的司機(jī)隨你添加.它們唯一的共同點(diǎn)都是開(kāi)車. |
|
來(lái)自: 看風(fēng)景D人 > 《設(shè)計(jì)模式》