日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java反射机制在工厂模式中的应用

發(fā)布時(shí)間:2023/12/16 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java反射机制在工厂模式中的应用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在本篇文章中就不詳細(xì)介紹工廠模式,主要介紹一下反射在工廠模式中的使用,讓讀者對(duì)反射機(jī)制帶來(lái)的好處有更深的認(rèn)識(shí)。

首先看一下簡(jiǎn)單工廠模式

簡(jiǎn)單工廠模式(simple factory)是類(lèi)的創(chuàng)建模式,又叫靜態(tài)工廠方法(static factory method)模式。

簡(jiǎn)單工廠模式就是由一個(gè)工廠類(lèi)根據(jù)傳入的參數(shù)決定創(chuàng)建哪一種的產(chǎn)品類(lèi)。

簡(jiǎn)單工廠模式實(shí)例:

//動(dòng)物接口 interface Animal{public void speak(); } //人實(shí)現(xiàn)類(lèi) class Man implements Animal{@Overridepublic void speak() {System.out.println("我是人我會(huì)說(shuō)話:哈哈哈!!!");} } //狗實(shí)現(xiàn)類(lèi) class Dog implements Animal{@Overridepublic void speak() {System.out.println("我是小狗不會(huì)說(shuō)話:汪汪汪!!!");} } //工廠類(lèi) class Factory{public Animal getAnimal(String name){if("man".equals(name)){return new Man();}else{return new Dog();}} } //測(cè)試類(lèi) public class GeneralFactory {public static void main(String[] args){Factory factory = new Factory();Animal an = factory.getAnimal("dog");an.speak();} }輸出結(jié)果:

我是小狗不會(huì)說(shuō)話:汪汪汪!!!

上面代碼中,定義了一個(gè)動(dòng)物(Animal)接口,接著分別定義了人(Man)和狗(Dog)實(shí)現(xiàn)類(lèi),實(shí)現(xiàn)了speak()說(shuō)話的方法。

如果我們現(xiàn)在不用工廠模式,在調(diào)用人的說(shuō)話方法時(shí)需要new一個(gè)人(Man)的對(duì)象,使用狗的說(shuō)話方式時(shí),需要new一個(gè)狗(Dog)類(lèi)的對(duì)象。

這樣在new對(duì)象時(shí),就需要考慮到接口和子類(lèi)的實(shí)現(xiàn)方式,增加了代碼的耦合度。在代碼中使用new操作其實(shí)也是一種硬編碼方式。

使用簡(jiǎn)單工廠模式解決這個(gè)問(wèn)題(上面的代碼),封裝一個(gè)工廠類(lèi),把new對(duì)象的操作放在這個(gè)工廠類(lèi)中,這樣我們?cè)谡{(diào)用子類(lèi)里面的方法時(shí),并不需要考慮子類(lèi)的實(shí)現(xiàn)方式,只需要調(diào)用工廠類(lèi),讓工廠類(lèi)給我們實(shí)現(xiàn)new對(duì)象的過(guò)程,使子類(lèi)與外界操作沒(méi)有聯(lián)系,降低代碼耦合性。

大家應(yīng)該也發(fā)現(xiàn)了簡(jiǎn)單工廠模式有個(gè)很大的弊端,就是現(xiàn)在要實(shí)現(xiàn)很多動(dòng)物的speak()方法,那么工廠類(lèi)里面就要不斷的添加new對(duì)象的操作,修改里面的代碼,很顯然這樣并沒(méi)有達(dá)到我們理想的要求。可以使用Java的反射機(jī)制來(lái)解決。

采用反射機(jī)制的簡(jiǎn)單工廠模式實(shí)例:

package com.qcjy.factory;//動(dòng)物接口 interface Animal1{public void speak(); } //人實(shí)現(xiàn)類(lèi) class Man1 implements Animal{@Overridepublic void speak() {System.out.println("我是人我會(huì)說(shuō)話:哈哈哈!!!");} } //狗實(shí)現(xiàn)類(lèi) class Dog1 implements Animal{@Overridepublic void speak() {System.out.println("我是小狗不會(huì)說(shuō)話:汪汪汪!!!");} } //工廠類(lèi) class Factory1{public Object getAnimal(String className) throws Exception{Class<?> cls = Class.forName(className);Object obj = cls.newInstance();return obj;} } //測(cè)試類(lèi) public class ReflectFactory {public static void main(String[] args) throws Exception{Factory1 factory = new Factory1();Animal an = (Animal)factory.getAnimal("com.qcjy.factory.Man1");an.speak();} }輸出結(jié)果:

我是人我會(huì)說(shuō)話:哈哈哈!!!采用反射后,無(wú)論添加多少個(gè)子類(lèi),工廠類(lèi)中的代碼都不需要修改,只需要在操作的時(shí)候傳入子類(lèi)的類(lèi)路徑(包.類(lèi))就可以了,實(shí)現(xiàn)了各個(gè)業(yè)務(wù)邏輯之間的完全分離,代碼耦合性進(jìn)一步降低,很好的解決了上面的問(wèn)題。

看到這里,大家應(yīng)該體會(huì)到了反射機(jī)制給我?guī)?lái)的方便了吧,哈哈!

PS:工廠模式分為簡(jiǎn)單工廠模式、工廠方法模式、抽象工廠模式。簡(jiǎn)單工廠模式是對(duì)代碼的自然封裝,比較容易理解,幾乎每個(gè)人都會(huì)用的上。真正算的上設(shè)計(jì)模式的是抽象工廠模式,但是大部分人都很少能用上抽象工廠模式。Spring框架中的IOC用到的就是簡(jiǎn)單工廠模式。


總結(jié)

以上是生活随笔為你收集整理的Java反射机制在工厂模式中的应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。