`

制_机_射_反

阅读更多
抽象工厂模式中:使用反射来获取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"聚焦于探讨这种外包设计策略,以及其在创建具有镭射反光效果的塑料...

    基于LiDAR点云数据的真正射影像制作

    常见的DSM内插算法包括反距离加权插值法(IDW)、Kriging插值法、自然邻近点插值法(Naïve Nearest Neighbor)、样条插值法以及线性和非线性插值法等,每种方法都有其适用场景和优缺点。 2. 传统DOM制作原理: 数字...

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

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

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

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

    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电源和半波天线,电路设计中最富挑战性的部份就是...

    欧姆龙_E3Z-LS 漫返射.pdf

    在现代工业自动化领域,对传感器的性能要求愈发严苛。工件表面的反光特性、表面的凸凹不平以及复杂多变的生产背景,都对传感器的检测能力提出了挑战。欧姆龙公司作为全球知名的自动化控制及电子设备制造厂商,其推出...

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

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

    模具制造专业术语.doc

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

    风机拉拔测试方案

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

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

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

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

    牛顿运动定律是这一部分的核心,尤其是牛顿第一定律(惯性定律)、第二定律(加速度定律)和第三定律(作用与反作用定律)。 其次是**能量与功**,这部分内容涉及能量的各种形式,包括动能和势能(重力势能和弹性...

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

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

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

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

    行业文档-设计装置-转移镭射防伪卷烟骨架纸.zip

    设计装置包括电脑设计系统、激光雕刻机、印刷机等,用于制作模板和批量生产。 三、转移镭射防伪技术 转移镭射防伪技术是现代防伪手段的一种,它通过镭射全息图像技术将独特的防伪图案转移到纸张上。这种技术可以...

    技术要求-风机.pdf

    双向可逆风机的正反转性能需要保持一致,并且效率不低于75%。TVF风机还应能在限制启动电流的情况下快速达到额定转速。 总的来说,《技术要求-风机.pdf》文件对于城市轨道交通中风机和风阀类设备的技术要求做了详尽...

Global site tag (gtag.js) - Google Analytics