<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
工廠方法模式:也叫虛擬構造器模式或者多型工廠模式,它屬於類建立型模式。
在工廠方法模式中,工廠父類別負責定義建立產品物件的公共介面,而工廠子類則負責生成具體的產品物件,這樣做的目的是將產品類的範例化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該範例化哪一個具體產品類。
我們知道在現在的真實工廠內分工越來越細,越來越專業化。。各種產品有專門的工廠生產,徹底告別了自給自足的小農經濟時代,這大大縮短了產品的生產週期,提高了生產效率。而工廠方法模式即滿足了開閉原則,也繼承了簡單工廠模式的優點。
舉例說明:
在簡單工廠模式的文章中的可樂工廠,因為只有一個工廠類,所以任何產品都需要在這個類裡面去修改和調整,而工廠方法模式就是有多個工廠,每個工廠生產一個產品,如果有需要增加新產品,我們直接再新建一個工廠即可,就不需要在其他工廠的內部再去修改,這樣就符合了開閉原則。
優點:
缺點:
結構由以下四個部分組成:
結構圖:
還是以上一篇文章的可樂工廠為例:
產品有:可口可樂、百事可樂、無糖可樂
在簡單工廠模式中只有一個可樂工廠,可以生產三種產品,在工廠方法模式中就可以有多個工廠來生成對應的產品:
生產可樂的方法:
/** * 提供了產品的介面 */ public interface Cola { //生產可樂的方法 public void cola(); }
可樂抽象工廠:
/** * 可樂抽象工廠(可以理解成可樂總廠,旗下還有很多分廠) */ public interface ColaFactory { public Cola newCola(); }
生成三種可樂的方法: 可樂可樂:
/** * 產品名稱:可樂可樂,實現了產品的介面 */ public class CocaCola implements Cola{ @Override public void cola() { System.out.println("開始生產可口可樂"); } }
百事可樂:
/** * * 產品名稱:百事可樂,實現了產品的介面 */ public class PepsiCola implements Cola{ @Override public void cola() { System.out.println("開始生產百事可樂"); } }
無糖可樂:
/* * 產品名稱:無糖可樂,實現了產品的介面 */ public class SugarFreeCola implements Cola{ @Override public void cola() { System.out.println("開始生產無糖可樂"); } }
三個產品對應三個工廠:
生產可口可樂的工廠:
/** * * 具體工廠1:可口可樂工廠 */ public class CocaColaFactory implements ColaFactory{ @Override public Cola newCola() { System.out.println("我是可樂工廠下面的可口可樂工廠"); return new CocaCola(); } }
生產百事可樂的工廠:
/** * * 具體工廠2:百事可樂工廠 */ public class PepsiColaFactory implements ColaFactory{ @Override public Cola newCola() { System.out.println("我是可樂工廠下面的百事可樂工廠"); return new PepsiCola(); } }
生產無糖可樂的工廠:
/* * 具體工廠3:無糖可樂工廠 */ public class SugarFreeColaFactory implements ColaFactory{ @Override public Cola newCola() { System.out.println("我是可樂工廠下面的無糖可樂工廠"); return new SugarFreeCola(); } }
到這裡目前有:
測試類:
public class Test { public static void main(String[] args) { try{ //新建一個可樂方法物件 Cola a; //新建一個可樂工廠物件 ColaFactory af; //告訴可樂工廠,你需要什麼可樂,並且通知對應的分工廠 af = (ColaFactory) new PepsiColaFactory(); //執行對於生產方法 a = af.newCola(); a.cola(); }catch (Exception e ){ System.out.println(e.getMessage()); } } }
比如我現在需要百事可樂,我在af內傳入百事可樂工廠:
我是可樂工廠下面的無糖可樂工廠
開始生產無糖可樂
如果傳入CocaColaFactory:
我是可樂工廠下面的可口可樂工廠
開始生產可口可樂
這就是工廠方法模式,和簡單工廠模式有所不同,在這個模式內有一個抽象工廠介面,也就是你需要增加新產品後,不需要在原本的工廠內去修改程式碼,而是直接新建一個工廠,去實現抽象工廠即可,也是符合了開閉原則。
當然缺點也就是工廠多了,管理變得複雜,也增加了系統的抽象性和理解難度,而且抽象產品只能生產一種產品,但是此弊端可使用抽象工廠模式解決(抽象工廠模式在下一篇文章)
到此這篇關於Java十分鐘精通進階工廠方法模式的文章就介紹到這了,更多相關Java 工廠方法模式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45