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. Linq介绍

    什么是LINQ? LINQ全称Language Integrated Query,中文翻译"语言集成查询".在.NET框架中,大致使用三大组件实现这个封装,分别 LINQ to O ...

  2. grails&groovy的IllegalArgument异常

    我在开发的过程中遇到了这样一个异常,总是提示IllegalArgument异常,代码大致如下: if(haomgl.save(flush:true)){ //更新库存:状态为2的位置存煤 def cu ...

  3. 表单数据校检方法 onsubmit()的使用?

    在项目中为一个表单(from)编写onsubmit()脚本的时候,经常需要验证表单中数据的合法性 所以常会写道:<form action="/admin/addUser.do" ...

  4. 转:Android布局优化

    categories: Android 在Android开发中,我们常用的布局方式主要有LinearLayout.RelativeLayout.FrameLayout等,通过这些布局我们可以实现各种各 ...

  5. CLOUDSTACK接管VCENTER,意外频出,但最终搞定

    没办法,第一次吃螃蟹,总是经常住. 还好,我有一颗不肯媚俗的心~~ 但二级存储,和 存储的性能,也必须纳入考虑范围了.

  6. GitHub上最火的开源项目SlidingMenu导入出错的终极解决方案

    SlidingMenu 开源项目下载地址 : https://github.com/jfeinstein10/slidingmenu Actionbarsherlock 开源项目下载地址 :http: ...

  7. SQL 时间戳转DateTime类型

    最近在工作中通过接口获取时间字段为时间戳的值,直接入库后再页面查询时间格式时候需要通过SQL语句将时间戳格式装换为时间格式进行比较,首先我们需要知道时间戳格式是怎么产生的,: Unix时间戳(Unix ...

  8. C#中两个时间的比较

    var DateTimedt1 = Convert.ToDateTime(dt);     var DateTimedt2 = Convert.ToDateTime(DateTime.Now);    ...

  9. HDOJ 2117 Just a Numble(模拟除法)

    Problem Description Now give you two integers n m, you just tell me the m-th number after radix poin ...

  10. adb Logcat用法

    转自: http://blog.csdn.net/tiantianshangcha/article/details/6288537 个人认为有一下几个常用命令: adb logcat -b radio ...