`
Allen_Oscar
  • 浏览: 24402 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 反射工厂

阅读更多

工厂方法模式定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

UML类图:

所有工厂模式都用来封装对象的创建。工厂方法模式通过让子类决定改创建的对象是什么,来达到将对象创建的过程封装的目的。

 

1.Creator所有子类都必须实现这个抽象的factoryMethod()方法。

2.ConcreteCreator实现了factoryMethod(),以实际制造出产品。由它负责创建一个或多个集体产品,只有此类知道如何创建这些产品。

3.所有产品ConcreteProduct必须实现Product,这样就可以使用这个接口,而不是具体的类。

注意:这里说的实现不一定是实现接口,而是泛指超类。

所有工厂模式都用来封装对象的创建。工厂方法模式通过让子类决定改创建的对象是什么,来达到将对象创建的过程封装的目的。这样做的好处是在实例化对象时,只会依赖于接口,而不是具体的类。(设计原则:针对接口编程)

 

例如:有一个蛋糕工厂,由蛋糕工厂负责生产各种蛋糕(奶油蛋糕、巧克力蛋糕、水果蛋糕、冰欺凌蛋糕等等)

//蛋糕类

public abstract class Cake {
protected String name;//名字

public void make() {
System.out.println("做蛋糕---");
}

public String makeDone() {
return name;
}

}


//巧克力蛋糕

public class ChocolateCake extends Cake {

public ChocolateCake() {

name = "巧克力蛋糕";

}

}


//奶油蛋糕

public class MilkCake extends Cake{

public MilkCake() {
name = "巧奶油蛋糕";
}

}


//工厂

public abstract class Factory {

//1.工厂方法是抽象的。
//2.工厂方法必须返回一个产品。
//3.工厂方法将客户(超类中的代码,例如:toMake())和具体创建产品的代码分隔开来。
abstract Cake createCake(String item);

public Cake toMake(String type){

Cake cake = createCake(type);
return cake;

}

}


//蛋糕工厂 利用java反射机制

public class CakeFactory extends Factory{

	@Override
	Cake createCake(String ClassName) {

		Cake c = null;
		try {
			c=(Cake)Class.forName(ClassName).newInstance();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
         
		return c;
 
	}
 
}


//客户端

public class ClientTest {

    public static void main(String[] args) {
	   
      
       //首先先创建一个蛋糕工厂
       Factory factory = new CakeFactory();
       //由蛋糕店工厂负责生产客户所需要的蛋糕。
       Cake cake = factory.toMake("com.csdn.reflectfactory.MilkCake");
       Cake cake_ = factory.toMake("com.csdn.reflectfactory.ChocolateCake");
       //取出工厂创建的蛋糕
       System.out.println(cake.makeDone());
       System.out.println(cake_.makeDone());
	}

}


输出:奶油蛋糕

巧克力蛋糕

反射的好处是如果创建新种类的蛋糕不用修改工厂的代码。

可以看看 没用反射的工厂模式 http://blog.csdn.net/allen_gang/article/details/9033453

分享到:
评论

相关推荐

    java 反射工厂模式

    Java反射和工厂模式是两种非常重要的编程概念,它们在软件设计和实现中起着关键作用。反射机制允许我们在运行时动态地获取类的信息并操作对象,而工厂模式是一种设计模式,它提供了一种创建对象的最佳方式,使得代码...

    利用java反射原理实现工厂模式

    总结起来,通过结合Java反射机制,我们可以优化工厂模式,使其在运行时具有更强的动态性,能够根据不同的条件或配置创建不同类型的对象。这在应对需求变化和提高代码可扩展性方面具有显著优势。同时,我们也需要注意...

    java反射.pdf

    ### Java反射机制详解 #### 一、什么是Java反射? Java反射是Java编程语言的一个特性,它允许运行时检查和操作程序结构(类、字段、方法等)。反射的主要用途包括但不限于:动态实例化对象、访问私有成员、调用...

    java反射机制应用

    ### Java反射机制应用详解 #### 一、Java反射机制简介 Java反射机制是Java语言提供的一种能在运行时分析类信息并动态操作对象的功能。通过反射,我们可以在程序运行期间获取类的信息(如类名、方法名等),创建...

    java反射原理详解

    Java反射机制是Java语言的一种强大的特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射主要涉及到`java.lang.Class`类、`java.lang.reflect`包中的类(如Constructor、Method、Field)以及...

    反射工厂的例子

    总结,反射工厂是Java中实现动态代码和插件架构的关键技术。通过它,我们可以编写更加灵活、适应性强的程序,使系统能够根据需求和环境的变化进行自我调整。然而,需要注意的是,过度使用反射可能会降低代码的可读性...

    Java反射相当的文档及示例

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得动态性、灵活性和元编程成为可能,从而极大地扩展了Java开发者的工具箱。在Java中,...

    Java反射与设计模式

    本文详尽地论述了Java反射,工厂模式,动态代理模式

    反射工厂的案例(DAO底层框架)

    结合这两个概念,"反射工厂"的案例可能是在创建对象时,使用工厂模式的逻辑,但在确定要创建哪个类的对象时,不预先硬编码类名,而是通过反射机制获取。例如,假设我们有一个数据库访问对象的接口DAO,有多个不同的...

    反射+抽象工厂模式

    在Java编程中,"反射+抽象工厂模式"是一种高级的软件设计技巧,它结合了两种强大的设计模式,以实现高度灵活和可扩展的系统。反射允许程序在运行时检查类、接口、字段和方法的信息,并能动态地创建对象和调用方法。...

    JAVA反射机制自定义框架测试代码

    Java反射机制是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在构建框架和库时尤为有用。本篇文章将...

    java反射机制详解

    ### Java反射机制详解 #### 一、反射机制是什么 反射机制是Java编程语言的一个核心特性,它允许程序在运行时动态地获取类的信息,并且能够动态地创建对象和调用对象的方法。简单来说,反射机制使得Java程序可以...

    抽象工厂模式+反射技术(抽象工厂模式+简单工厂模式)

    在Java或其他面向对象的语言中,反射是一种强大的工具,它允许程序在运行时检查类的信息,包括类的方法、属性和构造器,甚至可以在运行时动态创建对象并调用其方法。当结合抽象工厂模式使用时,反射可以用来动态地...

    java反射基本方法测试

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类、接口、字段和方法的信息,使得我们可以在不知道对象具体...

    Java反射_Spring IOC

    Java反射和Spring IOC是Java开发中的两个重要概念,它们在构建灵活、可扩展的应用程序时起着关键作用。本文将深入探讨这两个主题,并提供相关的学习资源。 首先,让我们了解一下Java反射。Java反射机制是Java语言的...

    java反射机制学习(五):工厂模式

    在本篇“java反射机制学习(五):工厂模式”中,我们将探讨如何利用反射与工厂模式结合,提升代码的灵活性和可扩展性。 首先,工厂模式是一种常用的创建型设计模式,它提供了一种创建对象的最佳方式。传统的工厂模式...

    Java反射简单应用

    几个小demo,介绍了反射的几个api操作,最后写了一个简单的Java反射应用:工厂+反射+配置文件。

    用反射机制改进的抽象工厂

    用反射机制改进的抽象工厂

    简单抽象工厂和反射的入门例子

    通过学习这个实践案例,你将更好地理解抽象工厂模式如何工作,以及如何在实际项目中利用Java反射来提高代码的灵活性和可维护性。同时,这也为你提供了在复杂系统中设计和实现可扩展组件的宝贵经验。

    Java反射和动态代理实例

    几个Java反射和动态代理的小例子。可以学习如何通过Java的反射机制实例化对象、调用对象的方法、操作对象的私有成员变量、改变数组中的某项的值、改变数组大小等;可以学习Java的动态代理模式、学习Java工厂模式以及...

Global site tag (gtag.js) - Google Analytics