博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java反射机制在工厂模式中的应用
阅读量:5825 次
发布时间:2019-06-18

本文共 2160 字,大约阅读时间需要 7 分钟。

在本篇文章中就不详细介绍工厂模式,主要介绍一下反射在工厂模式中的使用,让读者对反射机制带来的好处有更深的认识。

首先看一下简单工厂模式

简单工厂模式(simple factory)是类的创建模式,又叫静态工厂方法(static factory method)模式。

简单工厂模式就是由一个工厂类根据传入的参数决定创建哪一种的产品类。

简单工厂模式实例:

//动物接口interface Animal{	public void speak();}//人实现类class Man implements Animal{	@Override	public void speak() {		System.out.println("我是人我会说话:哈哈哈!!!");	}}//狗实现类class Dog implements Animal{	@Override	public 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对象的操作,修改里面的代码,很显然这样并没有达到我们理想的要求。可以使用Java的反射机制来解决。

采用反射机制的简单工厂模式实例:

package com.qcjy.factory;//动物接口interface Animal1{	public void speak();}//人实现类class Man1 implements Animal{	@Override	public void speak() {		System.out.println("我是人我会说话:哈哈哈!!!");	}}//狗实现类class Dog1 implements Animal{	@Override	public 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用到的就是简单工厂模式。

转载地址:http://uoidx.baihongyu.com/

你可能感兴趣的文章
修改故障转移群集心跳时间
查看>>
[轉]redis;mongodb;memcache三者的性能比較
查看>>
微软职位内部推荐-Sr DEV
查看>>
让你的WPF程序在Win7下呈现Win8风格主题
查看>>
JDBC二查询(web基础学习笔记八)
查看>>
802.11 学习笔记
查看>>
Leetcode-Database-176-Second Highest Salary-Easy(转)
查看>>
构建Docker Compose服务堆栈
查看>>
最小角回归 LARS算法包的用法以及模型参数的选择(R语言 )
查看>>
Hadoop生态圈-Kafka常用命令总结
查看>>
如何基于Redis Replication设计并实现Redis-replicator?
查看>>
浮点数内存如何存储的
查看>>
贪吃蛇
查看>>
EventSystem
查看>>
用WINSOCK API实现同步非阻塞方式的网络通讯
查看>>
玩一玩博客,嘿嘿
查看>>
P1352 没有上司的舞会
查看>>
ios11文件夹
查看>>
【HLOJ 559】好朋友的题
查看>>
Electric Fence(皮克定理)
查看>>