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. 142 Linked List Cycle II(如果链表有环,找到入口结点Medium)

    题目意思:如果有环,返回入口结点 思路:先判断有没环,再计算环的结点数,然后p1指向头,p2往后移结点次数,p1.p2相遇为入口结点 ps:还是利用指针间距这个思路 /** * Definition ...

  2. select 下拉菜单Option对象使用add(elements,index)方法动态添加

    原生js 的add函数为下拉菜单增加选项 1.object.add(oElement [, iIndex]) index 可选参数:指定元素放置所在的索引号,整形值.如果没有指定值,将添加到集合的最后 ...

  3. window.clearInterval与window.setInterval的用法 定时器的设置

    window.setInterval() 功能:按照指定的周期(以毫秒计)来调用函数或计算表达式. 语法:setInterval(code,millisec) code:在指定时间到时要执行的Java ...

  4. NSIndexSet-入门浅析

    NSIndexSet-入门浅析   记得上一次,用到,关于删除UITableView分组的方法 [tableView deleteSections:[NSIndexSet indexSetWithIn ...

  5. c语言用封装来优化程序

    一.基础研究 先对函数fa进行研究,代码如下: fa函数的参数为一个字符指针,他存储要输出的字符串.因为要显示在屏幕的中央位置,所以我们要把字符串放在段地址b800处.用strlen获取字符串的长度, ...

  6. Hadoop 学习笔记(二) HDFS API

    4.删除HDFS上的文件 package proj; import java.io.IOException; import org.apache.hadoop.conf.Configuration; ...

  7. 浅谈Java内存泄露

    一.引言 先等等吧……累了

  8. grunt serve Fatal error: Port 35729 is already in use by another process.

    y@y:~$ lsof | grunt y 0t0 TCP *: (LISTEN) Optimizin y 0t0 TCP *: (LISTEN) v8:Sweepe y 0t0 TCP *: (LI ...

  9. LayerDrawable 资源

    与 StateListDrawable 有点类似,LayerDrawable 也可包含一个 Drawable 数组,因此系统 将会按这些 Drawable 对象的数组顺序来绘制它们,索引最大的 Dra ...

  10. CentOS 启动提示unexpected inconsistency;RUN fsck MANUALLY

    CentOS这两天服务器出了问题了,提示如下: unexpected inconsistency;RUN fsck MANUALLY An error occurred during the file ...