Java反射机制在工厂模式中的应用
在本篇文章中就不詳細介紹工廠模式,主要介紹一下反射在工廠模式中的使用,讓讀者對反射機制帶來的好處有更深的認識。
首先看一下簡單工廠模式
簡單工廠模式(simple factory)是類的創建模式,又叫靜態工廠方法(static factory method)模式。
簡單工廠模式就是由一個工廠類根據傳入的參數決定創建哪一種的產品類。
簡單工廠模式實例:
//動物接口 interface Animal{public void speak(); } //人實現類 class Man implements Animal{@Overridepublic void speak() {System.out.println("我是人我會說話:哈哈哈!!!");} } //狗實現類 class Dog implements Animal{@Overridepublic void speak() {System.out.println("我是小狗不會說話:汪汪汪!!!");} } //工廠類 class Factory{public Animal getAnimal(String name){if("man".equals(name)){return new Man();}else{return new Dog();}} } //測試類 public class GeneralFactory {public static void main(String[] args){Factory factory = new Factory();Animal an = factory.getAnimal("dog");an.speak();} }輸出結果: 我是小狗不會說話:汪汪汪!!!上面代碼中,定義了一個動物(Animal)接口,接著分別定義了人(Man)和狗(Dog)實現類,實現了speak()說話的方法。
如果我們現在不用工廠模式,在調用人的說話方法時需要new一個人(Man)的對象,使用狗的說話方式時,需要new一個狗(Dog)類的對象。
這樣在new對象時,就需要考慮到接口和子類的實現方式,增加了代碼的耦合度。在代碼中使用new操作其實也是一種硬編碼方式。
使用簡單工廠模式解決這個問題(上面的代碼),封裝一個工廠類,把new對象的操作放在這個工廠類中,這樣我們在調用子類里面的方法時,并不需要考慮子類的實現方式,只需要調用工廠類,讓工廠類給我們實現new對象的過程,使子類與外界操作沒有聯系,降低代碼耦合性。
大家應該也發現了簡單工廠模式有個很大的弊端,就是現在要實現很多動物的speak()方法,那么工廠類里面就要不斷的添加new對象的操作,修改里面的代碼,很顯然這樣并沒有達到我們理想的要求??梢允褂肑ava的反射機制來解決。
采用反射機制的簡單工廠模式實例:
package com.qcjy.factory;//動物接口 interface Animal1{public void speak(); } //人實現類 class Man1 implements Animal{@Overridepublic void speak() {System.out.println("我是人我會說話:哈哈哈!!!");} } //狗實現類 class Dog1 implements Animal{@Overridepublic void speak() {System.out.println("我是小狗不會說話:汪汪汪!!!");} } //工廠類 class Factory1{public Object getAnimal(String className) throws Exception{Class<?> cls = Class.forName(className);Object obj = cls.newInstance();return obj;} } //測試類 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();} }輸出結果: 我是人我會說話:哈哈哈!!!采用反射后,無論添加多少個子類,工廠類中的代碼都不需要修改,只需要在操作的時候傳入子類的類路徑(包.類)就可以了,實現了各個業務邏輯之間的完全分離,代碼耦合性進一步降低,很好的解決了上面的問題。看到這里,大家應該體會到了反射機制給我帶來的方便了吧,哈哈!
PS:工廠模式分為簡單工廠模式、工廠方法模式、抽象工廠模式。簡單工廠模式是對代碼的自然封裝,比較容易理解,幾乎每個人都會用的上。真正算的上設計模式的是抽象工廠模式,但是大部分人都很少能用上抽象工廠模式。Spring框架中的IOC用到的就是簡單工廠模式。
總結
以上是生活随笔為你收集整理的Java反射机制在工厂模式中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通达信l2行情接口怎么用?
- 下一篇: 寂寞的圣诞夜