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. JQUERY1.9学习笔记 之基本过滤器(九) 小于选择器

    小于选择器 jQuery( ":lt(index)" ) jQuery( ":lt(-index)" ) 描述:选择所有小于指定下标的元素. <!DOCT ...

  3. 微信公众平台Js API(WeixinApi)

    微信公众平台Js API(WeixinApi): https://github.com/zxlie/WeixinApi#user-content-3%E9%9A%90%E8%97%8F%E5%BA%9 ...

  4. SCJP_104——题目分析(2)

    3. public class IfTest{ public static void main(String args[]){ int x=3; int y=1; if(x=y) System.out ...

  5. C#复习,输入学生信息排列成绩

    C#复习:在控制台程序中使用结构体.集合,完成下列要求项目要求:一.连续输入5个学生的信息,每个学生都有以下4个内容:1.序号 - 根据输入的顺序自动生成,不需要手动填写,如输入第一个学生的序号是1, ...

  6. 怎样在Swift中使用CocoaPods-b

    最近关于CocoaPods有很多的议论.你可能从别的开发者那里听到过,或者在Github的目录中看到过.如果你之前从来没有用过,你可能会问,"CocoaPods到底是什么?" 它不 ...

  7. 『Python』爬行搜索引擎结果获得指定主机二级域名及IP信息

    0x 00 前言 前天自己在玩的时候,自己通过百度搜索主机的二级域名感觉好麻烦,自已要一页页的去翻 而且人工识别是否是重复的二级域名也够蛋疼的,正好最近在学正则表达式,权当练手了 0x 00 代码 # ...

  8. 转:精心挑选的12款优秀 jQuery Ajax 分页插件和教程

    在这篇文章中,我为大家收集了12个基于 jQuery 框架的 Ajax 分页插件,这些插件都提供了详细的使用教程和演示.Ajax 技术的出现使得 Web 项目的用户体验有了极大的提高,如今借助优秀的  ...

  9. Qt_chartdirector图形开发

    ChartDirector 是一款商业的图表库,有多种语言的版本,使用它做的图表非常的精 细漂亮,提供免费版本,但会出现logo信息.网上有很多关于它的破解方法. 一.产品优点 高效快捷 采用多线程结 ...

  10. android 自定义titlebar

    首先,修改标题栏的宽度和背景,在style.xml中添加: <style> <item name="android:background">@drawabl ...