- 浏览: 117376 次
- 性别:
- 来自: 深圳
文章分类
最新评论
抽象工厂模式中:使用反射来获取XML文件中对应的服务信息,来创建对象,调用相应的服务,实现不同的功能需求。使用抽象工厂是减低程序之间的耦合度(零耦合,抽象耦合,具体耦合)
static PartFactory aPartFactory = null;
public static PartFactory get(String fName)
{
try
{
aPartFactory = (PartFactory)Class.forName(fName).newInstance();
}
catch (Exception e)
{
e.printStackTrace();
aPartFactory = null;
}
return aPartFactory;
}
public static void main(String[] args)
{
PartFactory a = get("com.zzz.xbliuc.ab.BPartFactory");
House house = new House(a.createWindow(), a.createGlass());
System.out.println(house);
}
----------------------------------------
1.定义一个文件(panel.properties)
1=com.rt.factory.Fan
2=com.rt.factory.Yuan
3=com.rt.factory.Gong
2.引用
package com.rt.factory;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Factory {
private static Properties shapes = new Properties();
static{
try {
InputStream in = Factory.class.getResourceAsStream("panel.properties");
shapes.load(in);//将配置文件中的信息加载到shapes对象中
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static Shape getShape(int type){
try {
//获得与形状类型匹配的形状类名
String className = (String)shapes.get(String.valueOf(type));
//通过fanshe机制构造形状对象
return (Shape)Class.forName(className).newInstance();
} catch (Exception e) {
return null;
}
}
-------------反射示例------------
public static void main(String[] args) throws NumberFormatException,
IOException, ClassNotFoundException, InstantiationException,
IllegalAccessException {
System.out.print("请输入运算类型: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sopl = br.readLine();
// 创建工厂对象
Factoty fy = new Factoty();
Operat a = fy.createOpe(sopl);
System.out.print(":");
BufferedReader n1 = new BufferedReader(new InputStreamReader(System.in));
double d1 = Double.parseDouble(n1.readLine());
System.out.print(":");
BufferedReader n2 = new BufferedReader(new InputStreamReader(System.in));
double d2 = Double.parseDouble(n1.readLine());
a.Operats(d1, d2);
System.out.println("结果 : " + a.getResult(d1, d2));
}
}
public class Factoty {
public Operat createOpe(String name) throws ClassNotFoundException,
InstantiationException, IllegalAccessException {
Operat operat = null;
Class classs = Class.forName(name);// 获取运算类的类对象
Object obj = classs.newInstance();// 获取运算类的实例对象
operat = (Operat) obj;// 强制类型转换
return operat;
}
}
public class Add extends Operat {
@Override
public double getResult(double a, double b) {
return a + b;
}
}
public class Div extends Operat {
@Override
public double getResult(double a, double b) {
return a / b;
}
}
public class Mul extends Operat {
@Override
public double getResult(double a, double b) {
return a * b;
}
}
public class Sub extends Operat {
@Override
public double getResult(double a, double b) {
return a - b;
}
}
public abstract class Operat {
private double a;
private double b;
public void Operats(double a, double b) {
this.a = a;
this.b = b;
}
public abstract double getResult(double a, double b);
}
-----------------------------------------
//反射示例
public class ReflectionTest {
public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
getReflection();
}
public static void getReflection() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
//自定义一个用户信息类,创建一个对象
UserInfo uInfo = new UserInfo();
Class c = uInfo.getClass();
//1.反射类中所有的公有属性
Field[] files = c.getFields();
for (int i = 0; i < files.length; i++) {
//System.out.println("所有公有属性:"+files[i].getName());
}
System.out.println("");
//2.反射类中所有的属性
Field[] filess = c.getDeclaredFields();
for (int i = 0; i < filess.length; i++) {
//System.out.println("所有的属性:"+filess[i].getName());
}
System.out.println("");
//3.反射类中私有属性
Field f = c.getDeclaredField("uId");//私有属性uId
f.setAccessible(true);
Integer i = (Integer)f.get(uInfo);
//System.out.println("反射类中私有属性的值: "+i+"\n");
//4.反射类中构造方法的参数
Constructor[] conts = c.getConstructors();
for (int j = 0; j < conts.length; j++) {
Class[] ty = conts[j].getParameterTypes();
for (int k = 0; k < ty.length; k++) {
//System.out.println("反射类中构造方法的参数: "+ty[k].getName()+" ");
}
}
System.out.println("");
//5.获取反射类的父类和接口
Class[] interfaces = c.getInterfaces();
for (Class class1 : interfaces) {
//System.out.println("实现的接口:"+class1.getName());
}
Class superClass = c.getSuperclass();
//System.out.println("继承的父类:"+superClass.getName()+"\n");
//6.获取反射类的方法,返回类型,参数名及参数类型
Method[] methods = c.getMethods();
for (Method method : methods) {
//System.out.println("所有的方法: "+"方法名:"+method.getName()+" ,返回类型:"+method.getReturnType().getName());
Class[] pTypes = method.getParameterTypes();
if(pTypes.length <= 0)continue;
//System.out.print("(");
for (int j = 0; j < pTypes.length; j++) {
//System.out.print("方法的参数:"+pTypes[j].getName());
if(pTypes.length > j+1){
//System.out.print(", ");
}
}
//System.out.println(") ");
System.out.println(" ");
}
}
}
static PartFactory aPartFactory = null;
public static PartFactory get(String fName)
{
try
{
aPartFactory = (PartFactory)Class.forName(fName).newInstance();
}
catch (Exception e)
{
e.printStackTrace();
aPartFactory = null;
}
return aPartFactory;
}
public static void main(String[] args)
{
PartFactory a = get("com.zzz.xbliuc.ab.BPartFactory");
House house = new House(a.createWindow(), a.createGlass());
System.out.println(house);
}
----------------------------------------
1.定义一个文件(panel.properties)
1=com.rt.factory.Fan
2=com.rt.factory.Yuan
3=com.rt.factory.Gong
2.引用
package com.rt.factory;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Factory {
private static Properties shapes = new Properties();
static{
try {
InputStream in = Factory.class.getResourceAsStream("panel.properties");
shapes.load(in);//将配置文件中的信息加载到shapes对象中
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static Shape getShape(int type){
try {
//获得与形状类型匹配的形状类名
String className = (String)shapes.get(String.valueOf(type));
//通过fanshe机制构造形状对象
return (Shape)Class.forName(className).newInstance();
} catch (Exception e) {
return null;
}
}
-------------反射示例------------
public static void main(String[] args) throws NumberFormatException,
IOException, ClassNotFoundException, InstantiationException,
IllegalAccessException {
System.out.print("请输入运算类型: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sopl = br.readLine();
// 创建工厂对象
Factoty fy = new Factoty();
Operat a = fy.createOpe(sopl);
System.out.print(":");
BufferedReader n1 = new BufferedReader(new InputStreamReader(System.in));
double d1 = Double.parseDouble(n1.readLine());
System.out.print(":");
BufferedReader n2 = new BufferedReader(new InputStreamReader(System.in));
double d2 = Double.parseDouble(n1.readLine());
a.Operats(d1, d2);
System.out.println("结果 : " + a.getResult(d1, d2));
}
}
public class Factoty {
public Operat createOpe(String name) throws ClassNotFoundException,
InstantiationException, IllegalAccessException {
Operat operat = null;
Class classs = Class.forName(name);// 获取运算类的类对象
Object obj = classs.newInstance();// 获取运算类的实例对象
operat = (Operat) obj;// 强制类型转换
return operat;
}
}
public class Add extends Operat {
@Override
public double getResult(double a, double b) {
return a + b;
}
}
public class Div extends Operat {
@Override
public double getResult(double a, double b) {
return a / b;
}
}
public class Mul extends Operat {
@Override
public double getResult(double a, double b) {
return a * b;
}
}
public class Sub extends Operat {
@Override
public double getResult(double a, double b) {
return a - b;
}
}
public abstract class Operat {
private double a;
private double b;
public void Operats(double a, double b) {
this.a = a;
this.b = b;
}
public abstract double getResult(double a, double b);
}
-----------------------------------------
//反射示例
public class ReflectionTest {
public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
getReflection();
}
public static void getReflection() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
//自定义一个用户信息类,创建一个对象
UserInfo uInfo = new UserInfo();
Class c = uInfo.getClass();
//1.反射类中所有的公有属性
Field[] files = c.getFields();
for (int i = 0; i < files.length; i++) {
//System.out.println("所有公有属性:"+files[i].getName());
}
System.out.println("");
//2.反射类中所有的属性
Field[] filess = c.getDeclaredFields();
for (int i = 0; i < filess.length; i++) {
//System.out.println("所有的属性:"+filess[i].getName());
}
System.out.println("");
//3.反射类中私有属性
Field f = c.getDeclaredField("uId");//私有属性uId
f.setAccessible(true);
Integer i = (Integer)f.get(uInfo);
//System.out.println("反射类中私有属性的值: "+i+"\n");
//4.反射类中构造方法的参数
Constructor[] conts = c.getConstructors();
for (int j = 0; j < conts.length; j++) {
Class[] ty = conts[j].getParameterTypes();
for (int k = 0; k < ty.length; k++) {
//System.out.println("反射类中构造方法的参数: "+ty[k].getName()+" ");
}
}
System.out.println("");
//5.获取反射类的父类和接口
Class[] interfaces = c.getInterfaces();
for (Class class1 : interfaces) {
//System.out.println("实现的接口:"+class1.getName());
}
Class superClass = c.getSuperclass();
//System.out.println("继承的父类:"+superClass.getName()+"\n");
//6.获取反射类的方法,返回类型,参数名及参数类型
Method[] methods = c.getMethods();
for (Method method : methods) {
//System.out.println("所有的方法: "+"方法名:"+method.getName()+" ,返回类型:"+method.getReturnType().getName());
Class[] pTypes = method.getParameterTypes();
if(pTypes.length <= 0)continue;
//System.out.print("(");
for (int j = 0; j < pTypes.length; j++) {
//System.out.print("方法的参数:"+pTypes[j].getName());
if(pTypes.length > j+1){
//System.out.print(", ");
}
}
//System.out.println(") ");
System.out.println(" ");
}
}
}
发表评论
文章已被作者锁定,不允许评论。
-
美邦智能
2013-03-30 14:35 0员工管理(工资,假期,) 客户管理 供应商管理 采购模块 ... -
加密解密
2011-12-03 14:59 870String a = "ABCc"; ... -
例_实_建_创_口_接_过_通
2011-08-17 09:50 507public interface IJieKou { ... -
BASE64编码
2011-08-12 16:59 627将对ABC进行BASE64编码: // 1、首先取ABC对 ... -
流_件_文_java
2011-07-20 14:10 665读取 File file = new File(" ... -
作_操_合_集
2011-07-05 15:09 737//Collections List<String> ... -
BigDecimal
2011-07-02 18:42 889double num1 = 2.36; double num2 ... -
件_文_Properties
2011-06-29 19:26 654Properties properties = new Pro ... -
Eclipse平台BPEL开发
2011-06-25 00:15 734Eclipse平台BPEL开发 -
件_文_缩_压
2011-04-11 19:46 650/****************************** ... -
素_元_组_数_除_删_加_增
2011-04-11 19:44 595private static void delIndexEle ... -
作_操_件_文_Java
2011-04-06 20:39 688/****************************** ... -
式_格_字_数
2011-04-06 20:36 668System.out.println(&quo ... -
用_引_软
2011-04-06 20:28 721/****************************** ... -
过_程_载_加_类
2011-04-06 20:27 6301.编写源代码 2.jdk变异成.class文件 3.类加 ... -
序_排_速_快_现_实_JAVA
2011-02-11 17:21 726JAVA实现一个快速排序? 排序的方法有:插入排序(直接插入排 ... -
器_时_定_java
2011-02-11 17:06 588public class aaa { //java定时执行 ... -
举_枚
2011-01-20 12:22 7561.枚举其实都是隐式的继承自java.lang.Enum。有类 ... -
类_e_l_i_F
2011-01-13 23:17 6101.File类提供了管理文件和目录的方法 delete() ... -
制_机_理_处_常_异
2011-01-13 22:29 7291.异常处理:如何表现异常情况?如何控制处理异常流程? 2. ...
相关推荐
《基于具有镭射反光效果的塑料包装盒及其制造方法》这一文档,深入探讨了现代包装设计中的一个重要领域——外包设计,并聚焦于一种创新技术的应用,即镭射反光效果在塑料包装盒上的实现和制造过程。...
在IT行业中,设计装置往往涉及到各种技术和应用领域。在这个特定的案例中,"行业文档-设计装置-一种非金属化激光镭射反光水松纸.zip" 提供了一个关于非金属材料上的激光镭射反光技术的应用。这个压缩包包含了一个名...
在IT行业中,设计外包是一种常见的业务模式,尤其在产品包装设计领域。本文件"行业分类-外包设计-基于具有镭射反光效果的塑料包装盒的说明分析.rar"聚焦于探讨这种外包设计策略,以及其在创建具有镭射反光效果的塑料...
控制阀可以控制消防泵抽真空的开启和关闭,单向阀则防止尾气反流至支管段,确保抽真空效果。 此设计优化了消防泵的结构,减少了设备重量,降低了制造成本,同时也实现了对尾气的有效利用。通过专利摘要可知,该装置...
- **反熔丝型FPGA**:对于基于反熔丝的FPGA而言,空间辐射会导致绝缘介质的击穿,进而影响器件的功能稳定性。主要的辐射效应是介质的绝缘击穿。 - **SRAM型FPGA**:对于基于SRAM的FPGA来说,空间辐射可能导致配置...
QGDW 12176-2021 反窃电监测终端技术规范 本标准规定了反窃电监测终端的技术要求、试验方法和检验规则。该标准适用于反窃电监测终端的设计、制造、安装和使用。 1. 范围 本标准规定了反窃电监测终端的技术要求,...
2. **中频感应电热弯管机感应加热宽度视中频功率、感应圈宽度、感应圈与管坯的相对位置而定,一般为______mm。** - **正确答案:** B.10~20 - **解析:** 中频感应加热技术在弯管过程中被广泛应用,加热宽度的...
2. 基于参考椭球参数和XYZ坐标,解出球面三角形的反余弦方程,找出EL和EB。 3. 然后通过EL和EB以及P的Z坐标,计算出纬度B和高程H。 4. 最后,通过EL和纬度B,可以计算出经度L。 在提供的压缩包中,`xyz2blh.cpp`和`...
本文将向您介绍如何制作袖珍调频发射机,该发射机非常适合初学者,电路简单易制,造价低廉,输出功率不超过5-8mW,发射范围在房屋区可至100米左右。这个发射机使用3V电源和半波天线,电路设计中最富挑战性的部份就是...
11. 单选题11:如图所示,小明同学水平拉伸一个弹弓,放手后将弹珠射出,则橡皮筋的弹性势能()_________ 本题考查的是物理学中的能量。 Correct answer is C.在释放过程中转化为弹珠动能。 12. 单选题12:下列...
双向可逆风机的正反转性能应保持一致,效率不低于75%。TVF风机应能在限制启动电流下快速达到额定转速。 总体而言,这份技术要求文件强调了设备供应商的资质、设备的适应性和性能标准,旨在保证昆明轨道交通项目的...
33. 射出成形(Injection Molding):一种使用射出机来制造模具的成形方式。 34. 温锻(Warm Forging):一种使用温处理来锻造金属的方式。 35. 精密铸造(Investment Casting):一种使用高精度的模具来制造模具...
优质的机箱通常采用厚度至少1毫米的镀锌钢板制成,镀锌可以防静电、防锈并减少指纹。另一种选择是铝合金机箱,它更轻、强度更高,且不易氧化,但价格较高且易受重压变形。 透明机箱虽然美观,但并不总是最佳选择。...
- **测试对象**:东北段NJD2合同段所有68台风机,型号统一为1120mm-K-4P-30型射流风机。 #### 四、拉拔测试工器具 - **主要工具**: - 拉拔仪(STML-20锚杆拉力计):用于提供拉力并测量拉力值。 - 测试架一套...
基于CMOS工艺平台的反熔丝FPGA(Field-Programmable Gate Array)实现是一项结合了集成电路制造工艺和编程灵活性的技术,其在军事和卫星领域具有广泛的应用前景。FPGA是一种可以通过软件编程来配置硬件逻辑功能的...
1. **力与运动**:这部分内容包括力的概念,如重力、摩擦力、弹力等,以及力如何影响物体的运动状态,比如牛顿第一定律(惯性定律)、第二定律(力的作用效果与质量和加速度的关系)和第三定律(作用力与反作用力)...
3. **异常电源电压**:因电池反接、电压调节器故障、寒冷天气下的跳线启动等因素导致的超出正常范围的电源电压。 4. **过渡电压**:在设备电路发生变化并达到稳态的过程中产生的电压,或由高压线缆引起的感应电压...
当光线射到镜子表面时,它不会穿过镜子,而是按照一定的规律改变方向,这就是光的反射。这个游戏中,光线碰到镜子后按照反射定律——入射角等于反射角——反射回去,解释了为什么我们能看到墙上的光斑。 2. **平面...