溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java工廠模式是什么意思

發(fā)布時(shí)間:2021-07-06 10:44:39 來(lái)源:億速云 閱讀:180 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要介紹“Java工廠模式是什么意思”,在日常操作中,相信很多人在Java工廠模式是什么意思問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Java工廠模式是什么意思”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

工廠模式:

設(shè)計(jì)模式是源于生活,人類(lèi)社會(huì)生產(chǎn)從原始的集體生產(chǎn)、私有化、作坊、手工工廠、流水線工程一路發(fā)展過(guò)來(lái),工廠生產(chǎn)模式成為效率最高的方式。

那么在軟件設(shè)計(jì)中也參考了這種方式:

工廠模式是我們最常用的實(shí)例化對(duì)象模式了,是用工廠方法代替new操作的一種模式。著名的Jive論壇 ,就大量使用了工廠模式,工廠模式在Java程序系統(tǒng)可以說(shuō)是隨處可見(jiàn)。因?yàn)楣S模式就相當(dāng)于創(chuàng)建實(shí)例對(duì)象的new,我們經(jīng)常要根據(jù)類(lèi)Class生成實(shí)例對(duì)象,如A a=new A() 工廠模式也是用來(lái)創(chuàng)建實(shí)例對(duì)象的,所以以后new時(shí)就要多個(gè)心眼,是否可以考慮使用工廠模式,雖然這樣做,可能多做一些工作,但會(huì)給你系統(tǒng)帶來(lái)更大的可擴(kuò)展性和盡量少的修改量。 工廠模式讓對(duì)象的使用者無(wú)需了解具體實(shí)現(xiàn),只需要通過(guò)對(duì)象工廠直接拿過(guò)來(lái)用就行了。

Java構(gòu)架師學(xué)習(xí)資料:Java構(gòu)架師技術(shù)棧/高并發(fā)/高可用/高性能/源碼解析

簡(jiǎn)單工廠模式:

Java工廠模式是什么意思

簡(jiǎn)單工廠模式是屬于創(chuàng)建型模式,又叫做靜態(tài)工廠方法(Static Factory Method)模式,但不屬于23種設(shè)計(jì)模式之一。簡(jiǎn)單工廠模式是由一個(gè)工廠對(duì)象決定創(chuàng)建出哪一種產(chǎn)品類(lèi)的實(shí)例。簡(jiǎn)單工廠模式是工廠模式家族中最簡(jiǎn)單實(shí)用的模式,可以理解為是不同工廠模式的一個(gè)特殊實(shí)現(xiàn)。

工廠(WaterFactory)角色:

簡(jiǎn)單工廠模式的核心,它負(fù)責(zé)實(shí)現(xiàn)創(chuàng)建所有實(shí)例的內(nèi)部邏輯。工廠類(lèi)的創(chuàng)建產(chǎn)品類(lèi)的方法可以被外界直接調(diào)用,創(chuàng)建所需的產(chǎn)品對(duì)象。

抽象產(chǎn)品(Water)角色:

簡(jiǎn)單工廠模式所創(chuàng)建的所有對(duì)象的父類(lèi),它負(fù)責(zé)描述所有實(shí)例所共有的公共接口。

具體產(chǎn)品(冰露、農(nóng)夫山泉、怡寶)角色:

是簡(jiǎn)單工廠模式的創(chuàng)建目標(biāo),所有創(chuàng)建的對(duì)象都是充當(dāng)這個(gè)角色的某個(gè)具體類(lèi)的實(shí)例。

優(yōu)點(diǎn):

工廠類(lèi)是整個(gè)模式的關(guān)鍵.包含了必要的邏輯判斷,根據(jù)外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個(gè)具體類(lèi)的對(duì)象.通過(guò)使用工廠類(lèi),外界可以從直接創(chuàng)建具體產(chǎn)品對(duì)象的尷尬局面擺脫出來(lái),僅僅需要負(fù)責(zé)“消費(fèi)”對(duì)象就可以了。而不必管這些對(duì)象究竟如何創(chuàng)建及如何組織的.明確了各自的職責(zé)和權(quán)利,有利于整個(gè)軟件體系結(jié)構(gòu)的優(yōu)化。

缺點(diǎn):

由于工廠類(lèi)集中了所有實(shí)例的創(chuàng)建邏輯,違反了高內(nèi)聚責(zé)任分配原則,將全部創(chuàng)建邏輯集中到了一個(gè)工廠類(lèi)中;它所能創(chuàng)建的類(lèi)只能是事先考慮到的,如果需要添加新的類(lèi),則就需要改變工廠類(lèi)了。

簡(jiǎn)單工廠模式代碼示例:

package demo;

/**

 * 飲用水抽象產(chǎn)品角色

 * @author OuYang

 *

 */

public interface Water {

       /**

        * 獲取一個(gè)產(chǎn)品

        * @return

        */

       public String getWater();

      

}



------------------------------------



package demo;

/**

 * 冰露實(shí)現(xiàn)類(lèi)

 * @author OuYang

 *

 */

public class IceDew implements Water{



       public String getWater() {

             

              return "冰露純凈水";

             

       }

      

}



--------------------------------------

package demo;

/**

 * 怡寶實(shí)現(xiàn)類(lèi)

 * @author OuYang

 *

 */

public class SimpleFactory_Water {

       public Water getWater(String brand) {

              if(brand.equals("冰露")) {

                     return new IceDew();

              }

              if(brand.equals("農(nóng)夫山泉")) {

                     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());

             

              //簡(jiǎn)單的工廠生產(chǎn)模式(小作坊)

              //用戶本身不再需要了解生產(chǎn)過(guò)程,只需要結(jié)果

              SimpleFactory_Water factory = new SimpleFactory_Water();

              System.out.println(factory.getWater("農(nóng)夫山泉").getWater());

       }

}

在Spring中,beanFactory就是對(duì)象工廠,配置<bean .........> 就相當(dāng)于代碼:

factory.getWater("農(nóng)夫山泉")

當(dāng)然,Spring的對(duì)象工廠遠(yuǎn)遠(yuǎn)沒(méi)有這么簡(jiǎn)單。

工廠方法模式:

在簡(jiǎn)單工廠模式中,由于工廠類(lèi)集中了所有實(shí)例的創(chuàng)建邏輯,違反了高內(nèi)聚責(zé)任分配原則,將全部創(chuàng)建邏輯集中到了一個(gè)工廠類(lèi)中;它所能創(chuàng)建的類(lèi)只能是事先考慮到的,如果需要添加新的類(lèi),則就需要改變工廠類(lèi)了。

很顯然,工廠也應(yīng)該抽象化,再去實(shí)現(xiàn)具體品牌的對(duì)象工廠,這樣就可以在工廠實(shí)現(xiàn)類(lèi)豐富更多的參數(shù)和功能。分工更細(xì),可維修性也更高。

Java工廠模式是什么意思

import SimpleFactory.Water;



/**

 * 工廠模型

 * @author OuYang

 *

 */

public interface Factory {

       //工廠的產(chǎn)品出口

       Water getWater();

}



--------------------------------------------

package methodfactory;

import SimpleFactory.NongFu;

import SimpleFactory.Water;

/**

 * 農(nóng)夫山泉生產(chǎn)工廠

 * @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;

/**

 * 測(cè)試類(lèi)

 * @author OuYang

 *

 */

public class FactoryTest {

       public static void main(String[] args) {

              System.out.println(new YiBaoFactory().getWater().getWater());

       }

}

抽象工廠模式:

在工廠方法模式中,我們無(wú)需new各種各樣的對(duì)象來(lái)使用,只需要new一個(gè)對(duì)象工廠即可獲得我們想要的對(duì)象。

但是這樣只是解決了功能聚集在同一個(gè)工廠的問(wèn)題,解決了改需求帶來(lái)的麻煩,但是我們?nèi)匀灰猲ew相應(yīng)的對(duì)象工廠,程序的復(fù)雜度依然存在。

  • 創(chuàng)建抽象工廠,有公共屬性和抽象方法。

  • 實(shí)現(xiàn)類(lèi)中實(shí)現(xiàn)冰露、農(nóng)夫、怡寶的生產(chǎn)工廠。

  • 這樣既解決的代碼的復(fù)雜性,又可以在工廠實(shí)現(xiàn)類(lèi)中設(shè)置不同的參數(shù)。

Java工廠模式是什么意思

/**

 * 抽象工廠

 * @author OuYang

 *

 */

public abstract class AbstractFactory  {

      

       //公共屬性和邏輯,容量

       int volume;

      

       //獲取怡寶

       public abstract YiBao getYiBao();

       //獲得冰露

       public abstract IceDew getIecDew();

       //獲得農(nóng)夫山泉

       public abstract NongFu getNongFu();

             

}



-------------------------------

package abstractfactory;



import SimpleFactory.IceDew;

import SimpleFactory.NongFu;

import SimpleFactory.YiBao;



/**

 * 抽象工廠實(shí)現(xiàn)類(lèi)

 * @author OuYang

 *

 */

public class WaterFactory extends AbstractFactory{

       @Override

       public YiBao getYiBao() {

              //設(shè)置為1升

              this.volume=1;

              return new YiBao();

       }



       @Override

       public IceDew getIecDew() {

              //設(shè)置為2升

              return new IceDew();

       }



       @Override

       public NongFu getNongFu() {

              //設(shè)置為3升

              return new NongFu();

       }



}

------------------------------------

package simplefactory_demo;



import abstractfactory.WaterFactory;

/**

*測(cè)試類(lèi)

*/

public class AbstractFactoryTest {

       public static void main(String[] args) {

             

              WaterFactory factory = new WaterFactory();

              System.out.println(factory.getIecDew().getWater());

到此,關(guān)于“Java工廠模式是什么意思”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI