`

制_机_射_反

阅读更多
抽象工厂模式中:使用反射来获取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(" ");
}
}
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    行业分类-外包设计-基于具有镭射反光效果的塑料包装盒及其制造方法的说明分析.rar

    《基于具有镭射反光效果的塑料包装盒及其制造方法》这一文档,深入探讨了现代包装设计中的一个重要领域——外包设计,并聚焦于一种创新技术的应用,即镭射反光效果在塑料包装盒上的实现和制造过程。...

    行业文档-设计装置-一种非金属化激光镭射反光水松纸.zip

    在IT行业中,设计装置往往涉及到各种技术和应用领域。在这个特定的案例中,"行业文档-设计装置-一种非金属化激光镭射反光水松纸.zip" 提供了一个关于非金属材料上的激光镭射反光技术的应用。这个压缩包包含了一个名...

    行业分类-外包设计-基于具有镭射反光效果的塑料包装盒的说明分析.rar

    在IT行业中,设计外包是一种常见的业务模式,尤其在产品包装设计领域。本文件"行业分类-外包设计-基于具有镭射反光效果的塑料包装盒的说明分析.rar"聚焦于探讨这种外包设计策略,以及其在创建具有镭射反光效果的塑料...

    消防泵用尾气射流装置的制作方法.docx

    控制阀可以控制消防泵抽真空的开启和关闭,单向阀则防止尾气反流至支管段,确保抽真空效果。 此设计优化了消防泵的结构,减少了设备重量,降低了制造成本,同时也实现了对尾气的有效利用。通过专利摘要可知,该装置...

    FPGA中的空间辐射效应及加固技术

    - **反熔丝型FPGA**:对于基于反熔丝的FPGA而言,空间辐射会导致绝缘介质的击穿,进而影响器件的功能稳定性。主要的辐射效应是介质的绝缘击穿。 - **SRAM型FPGA**:对于基于SRAM的FPGA来说,空间辐射可能导致配置...

    QGDW 12176-2021 反窃电监测终端技术规范

    QGDW 12176-2021 反窃电监测终端技术规范 本标准规定了反窃电监测终端的技术要求、试验方法和检验规则。该标准适用于反窃电监测终端的设计、制造、安装和使用。 1. 范围 本标准规定了反窃电监测终端的技术要求,...

    2015年新疆锅炉设备装配工专业考试题.docx

    2. **中频感应电热弯管机感应加热宽度视中频功率、感应圈宽度、感应圈与管坯的相对位置而定,一般为______mm。** - **正确答案:** B.10~20 - **解析:** 中频感应加热技术在弯管过程中被广泛应用,加热宽度的...

    blh2xyz_xyz2blh_高程转换_经度转换_blh2xyzc_blh2xyz_

    2. 基于参考椭球参数和XYZ坐标,解出球面三角形的反余弦方程,找出EL和EB。 3. 然后通过EL和EB以及P的Z坐标,计算出纬度B和高程H。 4. 最后,通过EL和纬度B,可以计算出经度L。 在提供的压缩包中,`xyz2blh.cpp`和`...

    袖珍调频发射机的制作

    本文将向您介绍如何制作袖珍调频发射机,该发射机非常适合初学者,电路简单易制,造价低廉,输出功率不超过5-8mW,发射范围在房屋区可至100米左右。这个发射机使用3V电源和半波天线,电路设计中最富挑战性的部份就是...

    2020年1月浙江省高中学业水平考试物理试题.pdf

    11. 单选题11:如图所示,小明同学水平拉伸一个弹弓,放手后将弹珠射出,则橡皮筋的弹性势能()_________ 本题考查的是物理学中的能量。 Correct answer is C.在释放过程中转化为弹珠动能。 12. 单选题12:下列...

    技术要求-风机.pdf

    双向可逆风机的正反转性能应保持一致,效率不低于75%。TVF风机应能在限制启动电流下快速达到额定转速。 总体而言,这份技术要求文件强调了设备供应商的资质、设备的适应性和性能标准,旨在保证昆明轨道交通项目的...

    模具制造专业术语.doc

    33. 射出成形(Injection Molding):一种使用射出机来制造模具的成形方式。 34. 温锻(Warm Forging):一种使用温处理来锻造金属的方式。 35. 精密铸造(Investment Casting):一种使用高精度的模具来制造模具...

    选购机箱应该注意什么.docx

    优质的机箱通常采用厚度至少1毫米的镀锌钢板制成,镀锌可以防静电、防锈并减少指纹。另一种选择是铝合金机箱,它更轻、强度更高,且不易氧化,但价格较高且易受重压变形。 透明机箱虽然美观,但并不总是最佳选择。...

    风机拉拔测试方案

    - **测试对象**:东北段NJD2合同段所有68台风机,型号统一为1120mm-K-4P-30型射流风机。 #### 四、拉拔测试工器具 - **主要工具**: - 拉拔仪(STML-20锚杆拉力计):用于提供拉力并测量拉力值。 - 测试架一套...

    基于CMOS工艺平台反熔丝FPGA实现.pdf

    基于CMOS工艺平台的反熔丝FPGA(Field-Programmable Gate Array)实现是一项结合了集成电路制造工艺和编程灵活性的技术,其在军事和卫星领域具有广泛的应用前景。FPGA是一种可以通过软件编程来配置硬件逻辑功能的...

    黑龙江省鸡西市2017_2018学年八年级物理下学期期中试题扫描版鲁教版五四制20180521463

    1. **力与运动**:这部分内容包括力的概念,如重力、摩擦力、弹力等,以及力如何影响物体的运动状态,比如牛顿第一定律(惯性定律)、第二定律(力的作用效果与质量和加速度的关系)和第三定律(作用力与反作用力)...

    汽车电子设备环境通则试验方法_日本_D001

    3. **异常电源电压**:因电池反接、电压调节器故障、寒冷天气下的跳线启动等因素导致的超出正常范围的电源电压。 4. **过渡电压**:在设备电路发生变化并达到稳态的过程中产生的电压,或由高压线缆引起的感应电压...

    三下第五单元_光照在镜子上_教学课件.ppt

    当光线射到镜子表面时,它不会穿过镜子,而是按照一定的规律改变方向,这就是光的反射。这个游戏中,光线碰到镜子后按照反射定律——入射角等于反射角——反射回去,解释了为什么我们能看到墙上的光斑。 2. **平面...

Global site tag (gtag.js) - Google Analytics