java 反射抽象_Java实现抽象工厂模式+java的反射的机制

这篇博客探讨了Java的反射机制,如何利用反射动态访问类的属性和方法,并结合抽象工厂模式进行实例讲解。文章阐述了抽象工厂模式的核心角色和如何在Java中实现,同时指出反射机制在面对新工厂类时如何遵循开闭原则,避免代码修改。通过读取XML配置文件动态实例化工厂,展示了在不修改原有代码的情况下增加新工厂类的能力。
摘要由CSDN通过智能技术生成

Java的反射机制:

JAVA反射机制是就是运行的状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。通过反射机制可以动态的访问类的属性和方法以及字段。

最常用的反射机制就是:(当然  reflect 类还有其他的很多的方法 不一一列举)

Class.forName("obj name").newInstance();

抽象工厂模式:

抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。 抽象产品(方法)角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。

抽象工厂通常和java的反射机制紧密联系在一起。当遇到新的具体工厂角色出现时,如果没有java的反射机制,我们需要首先创建具体的工厂类,在UI(客户端)修改相关代码, 将具体的工厂的实例化代码加入。严重违反了开闭原则。但是通过java的反射机制就可以将抽象工厂模式的实现对修改封闭,在拓展开放,将新的具体的工厂类名的写入xml文件中,通过读取xml文件就可以读取到新增的具体工厂的类名,根据类名自动生成相应类的实例化。

具体代码如下:

抽象工厂角色:

//iifactory.java

public interface iffactory {

public void createob();

}

具体工厂角色:

//javafactory

public class javafactory implements iffactory{

@Override

public void createob() {

// TODO Auto-generated method stub

System.out.println("create java object");

}

}

//cppfactory

public class cppfactory implements iffactory{

@Override

public void createob() {

// TODO Auto-generated method stub

System.out.println("create c++ object");

}

}

//csharpfactory

public class csharpfactory implements iffactory{

@Override

public void createob() {

// TODO Auto-generated method stub

System.out.println("create a csharp object");

}

}testUI(客户端)

public class testUI {

private String objectstr;

public void setselect(String key){

this.objectstr=key;

}

public String getselect(String key){

return this.objectstr;

}

public iffactory createobj(){

iffactory iffac = null;

try{

//

iffac=(iffactory) Class.forName(objectstr).newInstance();

}catch(Exception e){

e.printStackTrace();

}

return iffac;

}

public static void main(String[] args) {

testUI test=new testUI();

iffactory iffac=null;

test.setselect("cppfactory");

iffac=test.createobj();

iffac.createob();

}

}运行结果:

0818b9ca8b590ca3270a3433284dd417.png 因此我们如果再有其他的具体的工厂加入,首先创建具体的工厂类去生产具体的对象,接着讲具体的类名写入xml文件中,通过xml文件的具体字符串类名,去实现具体工厂的实例化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值