`
寻觅一只耳朵
  • 浏览: 35677 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于反射与配置文件的工厂模式

    博客分类:
  • java
阅读更多
首先先创建一个接口Fruit.java,我们的工厂就是专门造水果的
package factory.myinterface;

/**
 * @author zoupengfei
 *
 */
public interface Fruit {
      final String name="";
      public void eated();
      
}


我们的工厂可以早的水果是那些呢??就以苹果、香蕉、橘子为例

//苹果
package factory.myimpl;

import factory.myinterface.Fruit;


/**
 * @author zoupengfei
 *
 */
public class Apple implements Fruit {
	@Override
	public void eated() {
		System.out.println("***吃苹果****");
		
	}
    
}

//香蕉
package factory.myimpl;

import factory.myinterface.Fruit;


/**
 * @author zoupengfei
 *
 */
public class Banana implements Fruit {
	@Override
	public void eated() {
		System.out.println("***吃香蕉****");
		
	}
    
}

//橘子

package factory.myimpl;

import factory.myinterface.Fruit;


/**
 * @author zoupengfei
 *
 */
public class Orange implements Fruit {
	@Override
	public void eated() {
		System.out.println("***吃橘子****");
		
	}
    
}



然后是一个配置文件 resouse.properties。实际上就相当于类别清单。

apple=myimpl.Apple
orange=myimpl.Orange
banana=myimpl.Banana


对配置文件呢要有一个处理类:InitProperty.java
package factory.util;

import java.io.File;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

/**
 * @author zoupengfei
 *
 */
public class InitProperty {
    public static Properties getProperty(String filePath){
    	Properties pro=new Properties();
    	File file=new File(filePath);
    	if(file!=null){
            try {
        		FileInputStream in=new FileInputStream(file);
        		pro.load(in);
		     } catch (FileNotFoundException e) {
			 e.printStackTrace();
		     } catch (IOException e) {
		    	e.printStackTrace();
		     }
    	}else{
    		pro.setProperty("apple", "myimpl.Apple");
    	}
    	return pro;
    }
}


接下来最重要的是我们的工厂类,这个类仔细瞧好了我们用单例模式来把它写出FactoryOfFruit.java
package factory.myfactory;

import java.util.Properties;

import factory.myinterface.Fruit;
import factory.util.InitProperty;
/**
 * @author zoupengfei
 *
 */
public class FactoryOfFruit {
	private static  FactoryOfFruit factoryOfFruit;
	private   Properties pro=new Properties();
       private FactoryOfFruit(){
       }
       public static FactoryOfFruit getInstance(){
    	   if(factoryOfFruit==null){
    		   synchronized(FactoryOfFruit.class) { 
    		   factoryOfFruit=new FactoryOfFruit();
    		   }
    	   }
    	    return factoryOfFruit;
       }
       public  Fruit getFruitOf(String sort){
    	    Fruit f=null;
    	    try {
				f=(Fruit) Class.forName(pro.getProperty(sort)).newInstance();
			} catch (InstantiationException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
    	   return f;
       }
       
       public  void init(String filePath){
    	   pro=InitProperty.getProperty(filePath);
       }
}



我们这个工厂到底怎么样呢,能不能生产水果呢。那就让我们测试一下写我们的Test.java
package factory.test;

import factory.myfactory.FactoryOfFruit;
import factory.myinterface.Fruit;


/**
 * @author zoupengfei
 *
 */
public class Test {
	public static void main(String[] args) {
		FactoryOfFruit factory=FactoryOfFruit.getInstance();
		factory.init("src/resouse.properties");
		Fruit f=factory.getFruitOf("banana");
		f.eated();
	}
}



结果:
***吃香蕉****





接下来你就可以吃自己想要的水果喽!!

分享到:
评论

相关推荐

    反射简单工厂.rar

    在你提供的"反射简单工厂.rar"压缩包中,很可能包含了一个示例,演示如何使用配置文件来动态加载DLL,并基于反射创建对象。 简单工厂模式是一种设计模式,属于创建型模式,它提供一个创建对象的公共接口,而具体的...

    C#基于一个工厂模式设计的程序

    在这个工厂模式的实现中,反射可能用于在运行时根据某些条件动态创建对象,比如根据配置文件或用户输入来确定实例化哪个具体的类。反射可以增加程序的灵活性,但也可能会带来性能上的开销,因此在使用时需要权衡利弊...

    XML解析与反射应用联合.zip

    7. **设计模式应用**:可能涉及到工厂模式或策略模式,以实现基于XML配置的动态对象创建和行为选择。 这个学习资源将帮助你理解XML解析与反射的联合应用,提升你在实际项目中的灵活性和代码复用性。通过深入学习和...

    设计模式登录

    总结来说,这个“设计模式登录”项目利用抽象工厂设计模式来实现登录功能的解耦和扩展性,通过反射技术动态加载配置文件中的登录处理类,同时结合配置文件来适应不同的登录需求。这种设计使得系统更易于维护和升级,...

    C#反射\商场收银系统源码(C#抽象工厂反射技术)

    利用反射,我们可以根据配置文件或用户选择的支付方式动态加载相应的工厂类,然后通过工厂方法创建支付对象,进行支付操作。这样,即使添加新的支付方式,也无需修改原有代码,符合开闭原则,提高了系统的可扩展性。...

    .NET中反射机制的使用与分析_-_focus_on_.NET_-_博客园

    4. **设计模式实现**:在实现工厂模式、策略模式等设计模式时,反射常被用来动态选择和创建具体实现。 #### 使用反射的注意事项 虽然反射提供了巨大的灵活性,但使用时也需谨慎: 1. **性能影响**:反射操作通常...

    反射学习笔记含代码

    ### 七、工厂模式与配置文件的应用 通过反射,我们可以实现基于配置文件的工厂模式,这样可以在不修改代码的情况下,通过更改配置文件中的类名来改变实际创建的对象类型,提高了系统的灵活性和可扩展性。 ### 八、...

    StuManage.rar_工厂

    《基于ASP.NET C#的“工厂”模式在学生管理系统中的应用》 在IT领域,设计模式是解决常见问题的经验总结,而“工厂”模式作为其中的一种,被广泛应用于软件开发中,尤其是对于对象创建的抽象化处理。在这个名为...

    基于LM393芯片双红外反射式传感器DXP设计硬件(原理图+PCB)+文档资料.zip

    在本项目中,我们看到的是一个基于LM393的双红外反射式传感器的完整硬件设计,包括原理图和PCB布局,以及相关的文档资料。 LM393芯片拥有两个独立的比较器,每个比较器都有自己的输入引脚,可以设置各自的阈值电压...

    .net core 3.1 获取配置文件 编写了一个类库,可以拿来使用,如有不正出,请斧正.

    本篇文章将深入探讨如何在.NET Core 3.1中获取配置文件,并介绍一个已经编写好的类库,方便开发者直接使用。 首先,我们了解.NET Core 3.1中的配置体系架构。它基于`Microsoft.Extensions.Configuration`包,提供了...

    spring相关内容笔记

    IOC 底层原理主要包括 xml 解析、工厂模式和反射三部分。 二、IOC 容器 Spring 提供了两种 IOC 容器实现方式:BeanFactory 和 ApplicationContext。 1. BeanFactory BeanFactory 是 IOC 容器的基本实现,是 ...

    基于.NET 平台的插件式系统开发

    3. **工厂模式**:通过工厂模式创建具体的文件解析器实例。例如,在`FileFactory`类中,可以根据文件类型动态返回相应的`IFileParse`实例。 ```csharp public interface IFileParse { string FileName { get; set;...

    基于STM32倒车雷达设计源码.zip

    项目可能包含Makefile或IDE工程文件,用于编译和调试。 9. **硬件设计**:实物部分可能涉及到PCB设计、元器件选择、电源设计和天线布局等,这些都是实际产品中不可或缺的部分。 通过分析和学习这个项目,开发者...

    反射机制2

    2. **灵活性增强**:反射可以在运行时动态地发现和修改程序行为,如根据配置文件中的参数选择不同的方法执行。 3. **元数据信息**:通过反射,我们可以获取到类的元数据,包括类名、属性、方法、构造器等,这对于...

    J2EE高级开发框架.pdf

    IOC底层使用到的技术包括xml配置文件、dom4j解析xml文件、工厂设计模式、反射等。 五、IOC入门案例 下面是一个简单的IOC入门案例: 1. 导入jar包:首先需要下载Spring框架核心jar包,并将其添加到项目中。 2. ...

    spring6小细节.docx

    Spring IoC 容器的实现是基于工厂模式、XML 解析和反射机制的。它首先解析配置文件,然后使用反射机制创建对象,并将其存储在容器中,以便于后续的使用。 九、其他知识点 * 在 Spring 配置文件中,可以定义多个 ...

    阿里巴巴 java面试题

    Tomcat 中的设计模式包括了多种方面,如观察者模式、工厂模式、单例模式等。这些设计模式可以提高 Tomcat 的性能和可扩展性。 十四、Java 反射 Java 反射是 Java 语言中的一种机制,用于在运行时动态地创建对象。...

    基于51单片机的VL53L0X激光测距传感器程序

    压缩包中的"激光测距基于51"很可能包含了上述步骤的实现代码,可能包括C语言编写的驱动程序、配置文件以及相关的头文件。通过阅读和分析这些代码,开发者可以学习如何与VL53L0X传感器进行有效交互,以及如何在51...

    MonoRTM辐射传输模式

    "monortm"文件可能包含了MonoRTM的源代码、用户手册、示例输入文件和执行脚本。用户可以根据文档指导,配置模型参数,运行程序,并解析输出结果。 6. **优化与扩展** MonoRTM可能有多种版本或扩展,例如考虑多...

Global site tag (gtag.js) - Google Analytics