http://www.phpddt.com/dhtml/338.html

java里面没有typeof,js有。

我终于实现了用反射机制编写的工厂模式。java反射在工厂模式可以体现。

包含产品接口类,具体产品实现类,工厂类,这三种不同的类型

http://wenku.baidu.com/view/8899ecfff705cc175527094d.html

http://wenku.baidu.com/view/8ceb39c52cc58bd63186bd87.html

http://blog.csdn.net/justinavril/article/details/2873664

http://bbs.csdn.net/topics/60429890

http://www.cnblogs.com/pricks/archive/2009/08/11/1543855.html

http://www.cnblogs.com/bingoidea/archive/2009/06/21/1507889.html

http://www.cnblogs.com/octobershiner/archive/2012/03/18/2404751.html

具体java代码三种实现如下:

1、接口实现

/**
*
*/
package factory.realize1; /**
* @author wangjian2
* 接口
*/
public interface Product {
public String getProductName(String type,int id);
}
package factory.realize1;

public class Route implements Product {

    /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub } @Override
public String getProductName(String type, int id) {
return "RouteNameupdate";
} }
/**
*
*/
package factory.realize1; /**
* @author wangjian2
*
*/
public class Package implements Product { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub } @Override
public String getProductName(String type, int id) {
return "PackageName";
} }
/**
*
*/
package factory.realize1; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; /**
* @author wangjian2
*
*/
public class Factory { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub } public void getName(String type,int id){
if("跟团".equals(type)){
Product prd = new Route();
System.out.println(prd.getProductName("", 0));
}else if ("自助游".equals(type)){
Product prd = new Package();
System.out.println(prd.getProductName("", 0));
}
} /**
* 通过反射将参数传给函数并返回结果
* @param type
* @param id
*/
public void getNameByreflect(String type,int id){
Class<?> cls = null;
try {
//获取指定的任意type的所需类的完全限定名(包名+类名)相关联的class对象
cls = Class.forName("factory.realize1."+type);
//获取类对应的任意方法对象
Method getProductName = cls.getMethod("getProductName", new Class[]{String.class,int.class});
//使用该方法
Object result = getProductName.invoke(cls.newInstance(), new Object[]{new String(type),0});
System.out.println(result);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
*
*/
package factory.realize1; /**
* @author wangjian2
*
*/
public class TestExample { /**
* @param args
*/
public static void main(String[] args) {
Factory factory = new Factory();
factory.getName("跟团", 0);
//反射实现
factory.getNameByreflect("Route", 0);
} }

2、抽象类实现

/**
*
*/
package factory.realize2; /**
* @author wangjian2
* 抽象类
*/
public abstract class Product {
public abstract String getProductName(String type,int id);
}
package factory.realize2;

public class Route extends Product {

    /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub } @Override
public String getProductName(String type, int id) {
return "RouteNameupdate";
} }
/**
*
*/
package factory.realize2; /**
* @author wangjian2
*
*/
public class Package extends Product { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub } @Override
public String getProductName(String type, int id) {
return "PackageName";
} }
/**
*
*/
package factory.realize2; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; /**
* @author wangjian2
*
*/
public class Factory { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub } public void getName(String type,int id){
if("跟团".equals(type)){
Product prd = new Route();
System.out.println(prd.getProductName("", 0));
}else if ("自助游".equals(type)){
Product prd = new Package();
System.out.println(prd.getProductName("", 0));
}
} /**
* 通过反射将参数传给函数并返回结果
* @param type
* @param id
*/
public void getNameByreflect(String type,int id){
Class<?> cls = null;
try {
cls = Class.forName("factory.realize1."+type);
Method getProductName = cls.getMethod("getProductName", new Class[]{String.class,int.class});
Object result = getProductName.invoke(cls.newInstance(), new Object[]{new String(type),0});
System.out.println(result);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
*
*/
package factory.realize2; /**
* @author wangjian2
*
*/
public class TestExample { /**
* @param args
*/
public static void main(String[] args) {
Factory factory = new Factory();
factory.getName("跟团", 0);
factory.getNameByreflect("Route", 0);
} }

3、继承类重写(覆盖)

/**
*
*/
package factory.realize3; /**
* @author wangjian2
* 继承类重写(覆盖)
*/
public class Product {
public String getProductName(String type,int id) {
return null;
}
}
package factory.realize3;

public class Route extends Product {

    /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub } @Override
public String getProductName(String type, int id) {
return "RouteNameupdate";
} }
/**
*
*/
package factory.realize3; /**
* @author wangjian2
*
*/
public class Package extends Product { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub } @Override
public String getProductName(String type, int id) {
return "PackageName";
} }
/**
*
*/
package factory.realize3; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; /**
* @author wangjian2
*
*/
public class Factory { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub } public void getName(String type,int id){
if("跟团".equals(type)){
Product prd = new Route();
System.out.println(prd.getProductName("", 0));
}else if ("自助游".equals(type)){
Product prd = new Package();
System.out.println(prd.getProductName("", 0));
}
} /**
* 通过反射将参数传给函数并返回结果
* @param type
* @param id
*/
public void getNameByreflect(String type,int id){
Class<?> cls = null;
try {
cls = Class.forName("factory.realize1."+type);
Method getProductName = cls.getMethod("getProductName", new Class[]{String.class,int.class});
Object result = getProductName.invoke(cls.newInstance(), new Object[]{new String(type),0});
System.out.println(result);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
*
*/
package factory.realize3; /**
* @author wangjian2
*
*/
public class TestExample { /**
* @param args
*/
public static void main(String[] args) {
Factory factory = new Factory();
factory.getName("跟团", 0);
factory.getNameByreflect("Route", 0); } }

个人理解反射机制是为了开发者方便,减少开发量。

http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html

java反射在工厂模式可以体现

http://blog.csdn.net/ritterliu/article/details/7764849

java反射机制(工厂模式)的更多相关文章

  1. Java反射+简单工厂模式总结

    除了 new 之外的创建对象的方法 通过 new 创建对象,会使得程序面向实现编程,先举个例子,某个果园里现在有两种水果,一种是苹果,一种是香蕉,有客户想采摘园子里的水果,要求用get()方法表示即可 ...

  2. Java反射机制demo(七)—反射机制与工厂模式

    Java反射机制demo(七)—反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...

  3. Java反射机制在工厂模式中的应用

    在本篇文章中就不详细介绍工厂模式,主要介绍一下反射在工厂模式中的使用,让读者对反射机制带来的好处有更深的认识. 首先看一下简单工厂模式 简单工厂模式(simple factory)是类的创建模式,又叫 ...

  4. Java反射机制与工厂模式

    工厂模式属于创建型模式,它提供了一种创建对象的最佳方式. 它的特点是:客户端的程序类不直接牵扯到对象的实例化管理,只与接口发生关联,通过工厂类获取指定接口的实例化对象. 简单工厂模式如下: inter ...

  5. Java反射机制详解(3) -java的反射和代理实现IOC模式 模拟spring

    IOC(Inverse of Control) 可翻译为“控制反转”,但大多数人都习惯将它称为“依赖注入”.在Spring中,通过IOC可以将实现类.参数信息等配置在其对应的配置文件中,那么当 需要更 ...

  6. java学习笔记之反射—反射和工厂模式

    简单工厂模式又称为静态工厂方法模式,它是由工厂对象来决定要创建哪一种类的实例化对象. 静态工厂代码: class Factory{ private Factory() {} public static ...

  7. JAVA反射机制学�

    JAVA反射机制:对于随意一个类,都可以知道这个类的全部属性和方法:对于随意一个对象,都可以调用它的随意一个方法和属性:这样的动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. J ...

  8. 一个例子让你了解Java反射机制

    本文来自:blog.csdn.net/ljphhj JAVA反射机制: 通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运 ...

  9. (转)JAVA反射机制理解

    JAVA反射机制: 通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运行的时候还可以动态地去操作他们. 理论的东东太多也没 ...

随机推荐

  1. ActiveX相关

    ActiveX 1.创建ActiveXhttp://blog.csdn.net/fww330666557/article/details/6533118 继承IObjectSafety接口http:/ ...

  2. centos7 服务器安装nginx,mysql,php

    一.概述 项目的需要,今天在虚拟机上基于Centos安装配置了服务器运行环境,web服务用 nginx,数据库存储在mysql,动态脚本语言是php. 二.步骤 首页保证Centos7已经安装完毕,正 ...

  3. 初学Javascript对象

    <script> var p=new Object(); //属性 p.width=; p.height=; p.num=; p.autotime=; //方法 p.autoplay=fu ...

  4. jquery ajax(4).getjson()

    .getJSON()实例 .each()实例 $(function(){ $('#send').click(function() { $.getJSON('test.json', function(d ...

  5. 用soaplib的django webserver

    前面写过怎么利用suds来调用webservicePython调用基于https协议的SOAP WebService,这篇讲的是如何用soaplib开发SOAP WebService(最近发现国外开源 ...

  6. ExtJS 4 组件详解

    ExtJS 4 的应用界面是由很多小部件组合而成的,这些小部件被称作"组件(Component)",所有组件都是Ext.Component的子类,Ext.Component提供了生 ...

  7. Quantization Method

    如上一篇Quantization所说,可以在编码端通过设置offset来调整量化后的值,从而趋向于期望的量化值,而且在逆量化公式可以看出offset值在逆量化的时候是不会用到的. 目前来说,确定off ...

  8. java.lang.NoClassDefFoundError: javax/servlet/ServletContext

    方法1:把SpringBoot中main方法所在的class不再继承org.springframework.boot.context.web.SpringBootServletInitializer即 ...

  9. 【经典】Linux开发人员必看资料+工具

    Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核.Linux可安装在各种计算机硬件设备中,比如手机.平板电脑.路由器.视频游戏控制台.台 ...

  10. BZOJ1754: [Usaco2005 qua]Bull Math

    1754: [Usaco2005 qua]Bull Math Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 374  Solved: 227[Submit ...