日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > 設計模式――工廠模式

設計模式――工廠模式

來源:程序員人生   發布時間:2015-03-13 08:14:02 閱讀次數:3825次

場景設置

還記得前面講到過的簡單工廠模式嗎?
在客戶端(main中)的時候依然需要用到AnimalFactory.getAnimale(0) 來對動物種類進行選擇,則當新增加動物種類的時候,不能不在原工廠類AnimalFactory 中進行代碼的改動,這相當于在后臺進行改
動。
現在我們要解決的就是去掉Factory中的switch語句和任何判斷的邏輯,僅僅利用繼承或多態在客戶端實現對動物的選擇。

首先定義動物的基本性質(吃,叫,跑,睡)。 interface Animal{ public void eat(); public void shout(); public void run(); public void sleep(); }

然后實現物種多樣化

class Dog implements Animal{ @Override public void eat() { System.out.println("dog eat"); } @Override public void shout() { System.out.println("dog shout"); } @Override public void run() { System.out.println("dog run"); } @Override public void sleep() { System.out.println("dog sleep"); } } class Cat implements Animal{ @Override public void eat() { System.out.println("cat eat"); } @Override public void shout() { System.out.println("cat shout"); } @Override public void run() { System.out.println("cat run"); } @Override public void sleep() { System.out.println("cat sleep"); } }

至此,與簡單工廠模式沒有任何區分。重點以下:
將工廠虛擬化,使得具體的工廠生產具體的動物,而所有的具體工廠都應當具有抽象工廠的特性(屬性或方法)。這個抽象的工廠以下:

interface Factory{ public Animal getAnimal(); }

對上述的動物,需要有對應的動物工廠:

class DogFactory implements Factory{ @Override public Animal getAnimal() { return new Dog(); } } class CatFactory implements Factory{ @Override public Animal getAnimal() { return new Cat(); } }

終究,客戶端所要實現的東西即為:

public static void main(String[] args){ Factory dogFac = new DogFactory(); Animal dog = dogFac.getAnimal(); Factory catFac = new CatFactory(); Animal cat = catFac.getAnimal(); }

而不是簡單工廠方法中的:

public static void main(String[] args){ List<Animale> zoo = new ArrayList<Animale>(); for(int i=0;i<4;i++) zoo.add(AnimalFactory.getAnimale(0)); for(int i=0;i<2;i++) zoo.add(AnimalFactory.getAnimale(1)); for(int i=0;i<4;i++) zoo.add(AnimalFactory.getAnimale(2)); for(int i=0;i<2;i++) zoo.add(AnimalFactory.getAnimale(3)); for(Animale animale:zoo){ //animale.... } }

這樣做的好處是,充分體現了面向接口編程而不是面向實現編程。面向接口,相當于將具體的實現插入到了這個接口。即使實現的東西有問題(DogFactory or CatFactory),直接把它替換掉,或修改對應的實現類便可;如果需要增加新的物種(山羊,母雞等等),只需要在Factory接口上插入GoatFactory或ChickenFactory便可。
其實依照這個思路,Animal 這個接口的實現也能夠理解為在Animal的接口上插入各種具體的動物。

打個比方:就好比計算機的主板上本身有各種各樣的插口,內存的、硬盤的、cpu的等等,這些都是接口;接口上插的是對應的實現,比如內存條,硬盤和不同規格的cpu。當這些實現壞了,就直接拔下來換個好的插上,就相當于上述例子中Factory接口上的DogFactory有問題,那末直接修改DogFactory便可,而不用動CatFactory,更不用動主板main方法。
試想如果計算機的主板上不是插口,而是直接焊接的各種原件,那末當任何1個壞掉以后,都需要對主板進行修理,那末這個損失將是巨大的。換言之,在簡單工廠模式中,改動任何1個動物(增加、刪除)都會使得Factory類進行修改同時,客戶端main中的邏輯也可能需要修改。

綜上所述,工廠模式的的確確很好的體現了面向接口編程的思想,也更好的利用多態,將類和類之間有效的解耦,是1款經典的設計模式。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲精品久久久久 | 成人h在线观看 | 欧美做受 | 亚洲国产激情 | 久久久精品久久久 | 黄色在线观看视频网站 | 日本三级中国三级99人妇网站 | 国产精品久久久久国产a级 亚洲天堂偷拍 | 亚洲精品视频免费 | 一区二区三区在线播放 | 久久成人欧美 | 欧美一级免费看 | 国产成人精品久久二区二区 | 日韩在线欧美 | 久久久久高清 | 国产高清精品在线 | 日日夜夜精品视频免费 | 午夜精品 | cao在线 | 中文日产幕无线码一区二区 | 国产免费a| 天堂аⅴ在线最新版在线 | 国产精品一区不卡 | 欧美成人a | 正在播放一区 | 日本久久久一区二区三区 | 久久婷婷丁香 | 美女视频黄色免费 | jzzujzz少亚洲成熟少妇 | 91精品入口蜜桃 | 欧美一区二区三区 | 精品久久久99 | 精品乱人伦一区二区三区 | 综合av在线 | 欧美亚洲视频 | 午夜精品一区 | 国产综合久久久 | 51久久夜色精品国产麻豆 | 日本久久精品 | 男女羞羞免费视频 | 日韩精品三区 |