您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java工廠模式是什么意思”,在日常操作中,相信很多人在Java工廠模式是什么意思問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java工廠模式是什么意思”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
工廠模式:
設計模式是源于生活,人類社會生產從原始的集體生產、私有化、作坊、手工工廠、流水線工程一路發展過來,工廠生產模式成為效率最高的方式。
那么在軟件設計中也參考了這種方式:
工廠模式是我們最常用的實例化對象模式了,是用工廠方法代替new操作的一種模式。著名的Jive論壇 ,就大量使用了工廠模式,工廠模式在Java程序系統可以說是隨處可見。因為工廠模式就相當于創建實例對象的new,我們經常要根據類Class生成實例對象,如A a=new A() 工廠模式也是用來創建實例對象的,所以以后new時就要多個心眼,是否可以考慮使用工廠模式,雖然這樣做,可能多做一些工作,但會給你系統帶來更大的可擴展性和盡量少的修改量。 工廠模式讓對象的使用者無需了解具體實現,只需要通過對象工廠直接拿過來用就行了。
Java構架師學習資料:Java構架師技術棧/高并發/高可用/高性能/源碼解析
簡單工廠模式:
簡單工廠模式是屬于創建型模式,又叫做靜態工廠方法(Static Factory Method)模式,但不屬于23種設計模式之一。簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現。
工廠(WaterFactory)角色:
簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。工廠類的創建產品類的方法可以被外界直接調用,創建所需的產品對象。
抽象產品(Water)角色:
簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口。
具體產品(冰露、農夫山泉、怡寶)角色:
是簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例。
優點:
工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的信息,決定究竟應該創建哪個具體類的對象.通過使用工廠類,外界可以從直接創建具體產品對象的尷尬局面擺脫出來,僅僅需要負責“消費”對象就可以了。而不必管這些對象究竟如何創建及如何組織的.明確了各自的職責和權利,有利于整個軟件體系結構的優化。
缺點:
由于工廠類集中了所有實例的創建邏輯,違反了高內聚責任分配原則,將全部創建邏輯集中到了一個工廠類中;它所能創建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。
簡單工廠模式代碼示例:
package demo; /** * 飲用水抽象產品角色 * @author OuYang * */ public interface Water { /** * 獲取一個產品 * @return */ public String getWater(); } ------------------------------------ package demo; /** * 冰露實現類 * @author OuYang * */ public class IceDew implements Water{ public String getWater() { return "冰露純凈水"; } } -------------------------------------- package demo; /** * 怡寶實現類 * @author OuYang * */ public class SimpleFactory_Water { public Water getWater(String brand) { if(brand.equals("冰露")) { return new IceDew(); } if(brand.equals("農夫山泉")) { return new NongFu(); } if(brand.equals("怡寶")) { return new YiBao(); } return null; } } -------------------------------------------- package simplefactory_demo; import demo.IceDew; import demo.SimpleFactory_Water; public class TestWater { public static void main(String[] args) { //普通new模式 System.out.println(new IceDew().getWater()); //簡單的工廠生產模式(小作坊) //用戶本身不再需要了解生產過程,只需要結果 SimpleFactory_Water factory = new SimpleFactory_Water(); System.out.println(factory.getWater("農夫山泉").getWater()); } }
在Spring中,beanFactory就是對象工廠,配置<bean .........> 就相當于代碼:
factory.getWater("農夫山泉")
當然,Spring的對象工廠遠遠沒有這么簡單。
工廠方法模式:
在簡單工廠模式中,由于工廠類集中了所有實例的創建邏輯,違反了高內聚責任分配原則,將全部創建邏輯集中到了一個工廠類中;它所能創建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。
很顯然,工廠也應該抽象化,再去實現具體品牌的對象工廠,這樣就可以在工廠實現類豐富更多的參數和功能。分工更細,可維修性也更高。
import SimpleFactory.Water; /** * 工廠模型 * @author OuYang * */ public interface Factory { //工廠的產品出口 Water getWater(); } -------------------------------------------- package methodfactory; import SimpleFactory.NongFu; import SimpleFactory.Water; /** * 農夫山泉生產工廠 * @author OuYang * */ public class NongFuFactory implements Factory{ public Water getWater() { return new NongFu(); } } -------------------------------------------- package methodfactory; package abstractfactory; import SimpleFactory.IceDew; import SimpleFactory.NongFu; import SimpleFactory.YiBao; /** * 測試類 * @author OuYang * */ public class FactoryTest { public static void main(String[] args) { System.out.println(new YiBaoFactory().getWater().getWater()); } }
抽象工廠模式:
在工廠方法模式中,我們無需new各種各樣的對象來使用,只需要new一個對象工廠即可獲得我們想要的對象。
但是這樣只是解決了功能聚集在同一個工廠的問題,解決了改需求帶來的麻煩,但是我們仍然要new相應的對象工廠,程序的復雜度依然存在。
創建抽象工廠,有公共屬性和抽象方法。
實現類中實現冰露、農夫、怡寶的生產工廠。
這樣既解決的代碼的復雜性,又可以在工廠實現類中設置不同的參數。
/** * 抽象工廠 * @author OuYang * */ public abstract class AbstractFactory { //公共屬性和邏輯,容量 int volume; //獲取怡寶 public abstract YiBao getYiBao(); //獲得冰露 public abstract IceDew getIecDew(); //獲得農夫山泉 public abstract NongFu getNongFu(); } ------------------------------- package abstractfactory; import SimpleFactory.IceDew; import SimpleFactory.NongFu; import SimpleFactory.YiBao; /** * 抽象工廠實現類 * @author OuYang * */ public class WaterFactory extends AbstractFactory{ @Override public YiBao getYiBao() { //設置為1升 this.volume=1; return new YiBao(); } @Override public IceDew getIecDew() { //設置為2升 return new IceDew(); } @Override public NongFu getNongFu() { //設置為3升 return new NongFu(); } } ------------------------------------ package simplefactory_demo; import abstractfactory.WaterFactory; /** *測試類 */ public class AbstractFactoryTest { public static void main(String[] args) { WaterFactory factory = new WaterFactory(); System.out.println(factory.getIecDew().getWater());
到此,關于“Java工廠模式是什么意思”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。