`
寻觅一只耳朵
  • 浏览: 33966 次
  • 性别: 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();
	}
}



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





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

分享到:
评论

相关推荐

    asp.net知识库

    革新:.NET 2.0的自定义配置文件体系初探 关于如何在ASP.NET 2.0中定制Expression Builders 怎么在ASP.NET 2.0中使用Membership asp.net 2.0-实现数据访问(1) ASP.NET 2.0 新特性 .NET 2.0里使用强类型数据创建...

    超级玛丽源码Java-Spring5:春天5

    *加载配置文件时候就会把在配置文件对象进行创建· 1、生命周期:从对象创建到对象销毁的过程 (1)通过构造器创建bean实例(无参数构造) (2)为bean的属性设置值和对其他bean引用(调用set方法) (3)调用bean的初始...

    java8源码-Spring5:Spring5新特性

    通过加载配置文件、获取类的全路径、反射类 IOC接口(BeanFactory) IOC思想基于IOC容器完成,IOC容器底层就是对象工厂。 Spring提供IOC容器实现的2种方式: BeanFactory:IOC容器基本实现,Spring内部使用接口 加载...

    Spring.net框架

    三、基于配置文件和Reflection的工厂模式 为了消除MainApp对其它组件的依赖性,我们引入工厂模式,并且根据配置文件指定的装配规程,利用.net提供的反射技术完成对象的组装工作。 本部分代码仅仅提供一种功能演示,...

    windowsnt 技术内幕

    Domain Admins(域管理员)组的详细说明 赋予拨号进入权限 理解用户配置文件(User Profile) 为Windows用户创建并使用登录脚本文件(Logon Script) 创建漫游式用户配置文件(Roaming User Profile) 创建强制性用户配置...

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)_4.3_及免安装文件

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为VB/C#.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的代码基于OO、ADO.NET、分层架构、ORM,改进的抽象工厂设计模式及反射机制等...

    J2EE应用开发详解

    118 8.3.5 Struts2配置文件 119 8.4 Action的配置方式 121 8.4.1 动态方法调用 121 8.4.2 设置action元素的method属性 122 8.4.3 使用通配符配置action 122 8.4.4 默认action 123 8.5 拦截器Interceptor 123 8.5.1 ...

    ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)[ECG 4.3] 201105

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为VB/C#.Net数据库程序员开发量身定做的(ORM框架)代码生成工具,所生成的代码基于面向对象、分层架构、ORM,使用改进的抽象工厂设计模式及反射机制...

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)_4.3

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为VB/C#.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的代码基于OO、ADO.NET、分层架构、ORM,改进的抽象工厂设计模式及反射机制等...

    vb/c#.net实体代码生成工具(entityscodegenerate

    vb/c#.net实体代码生成工具(entityscodegenerate)【ecg】是一款专门为vb/c#.net数据库程序开发量身定做的(orm框架)代码生成工具,所生成的代码基于oo、ado.net、分层架构、orm,改进的抽象工厂设计模式及反射机制等...

    中美 IT 培训 C# Asp.net 笔记2

    详细讲授远程处理(Remoting)技术,包括基本远程处理框架,配置文件及其应用, 异步远程处理技术,租约和生存期控制;系统地讲授Windows服务编程、Com+ 服务、WSE2.0的使用。 掌握 Socket 编程、TCP、 UDP编程、...

    中美 IT 培训 C# Asp.net 全套笔记1

    详细讲授远程处理(Remoting)技术,包括基本远程处理框架,配置文件及其应用, 异步远程处理技术,租约和生存期控制;系统地讲授Windows服务编程、Com+ 服务、WSE2.0的使用。 掌握 Socket 编程、TCP、 UDP编程、...

    中美 IT 培训 C# Asp.net 笔记3

    详细讲授远程处理(Remoting)技术,包括基本远程处理框架,配置文件及其应用, 异步远程处理技术,租约和生存期控制;系统地讲授Windows服务编程、Com+ 服务、WSE2.0的使用。 掌握 Socket 编程、TCP、 UDP编程、...

    值类型与引用类型理论内容.part01.rar

    详细讲授远程处理(Remoting)技术,包括基本远程处理框架,配置文件及其应用, 异步远程处理技术,租约和生存期控制;系统地讲授Windows服务编程、Com+ 服务、WSE2.0的使用。 掌握 Socket 编程、TCP、 UDP编程、...

    精通DirectX.3D图形与动画程序设计.pdf

    第二部分介绍了direct3d程序设计的相关高级技术,包括多层纹理映射、纹理坐标自动生成与变换、环境映射、凹凸纹理映射、立体纹理、纹理压缩、.x文件格式分析、网格模型优化、层次细节网格模型、增强网格模型、蒙皮...

    值类型与引用类型理论内容.part05.rar

    详细讲授远程处理(Remoting)技术,包括基本远程处理框架,配置文件及其应用, 异步远程处理技术,租约和生存期控制;系统地讲授Windows服务编程、Com+ 服务、WSE2.0的使用。 掌握 Socket 编程、TCP、 UDP编程、...

    JAVA高并发高性能高可用高扩展架构视频教程

    企业常用框架springMVC基于注解+xml配置方式实现链接 WEB服务器优化之Tomcat7性能调优 JVM概述 Java开发技术之(项目工程的日志管理) 数据库连接池原理详解 Java企业级框架之核心技术(反射) Java-Base64算法(创新_...

    .NET之美:.NET关键技术深入分析

    11.5.4使用工厂方法实现分离 11.6 Remoting中的方法回调 11.6.1远程回调方式说明 11.6.2客户端类型和服务端类型 …… 第12章 在.NET中操作XML 第13章 .NET应用程序配置 第14章 基于角色的安全性 第15章 .NET...

    JAVA 范例大全 光盘 资源

    实例34 花园布局(抽象工厂模式) 80 实例35 几何图形(适配器模式) 82 第6章 字符串 85 实例36 获取字符串长度 85 实例37 比较字符串 86 实例38 Java字符串与文件的互转 88 实例39 截取带汉字的字符串 91 ...

Global site tag (gtag.js) - Google Analytics