JAVA工厂设计模式和反射机制
工厂设计模型是JAVA面向对象编程的基本模型,因为只要是获取实例,都应该通过工厂类来完成。
设计代码如下
传统工厂设计模型
package com.cn.test;
interface IMessage{
public void send(String msg);
}
class NewsPaper implements IMessage{
@Override
public void send(String msg) {
System.out.println("【新闻发布:"+msg+"】");
}
}
class NetMessage implements IMessage{
@Override
public void send(String msg) {
System.out.println("【消息发布:"+msg+"】");
}
}
class Factory{ //定义工厂类
private Factory(){}
public static IMessage getInstance(String className){
if ("newspaper".equalsIgnoreCase(className)){
return new NewsPaper();
}else if ("netmessage".equalsIgnoreCase(className)){
return new NetMessage();
}
return null;
}
}
public class TestDemo {
public static void main(String[] args) {
IMessage message = Factory.getInstance("newspaper");
message.send("某某新闻");
}
}
但是此时要扩充子类就很麻烦,没扩充一个子类就需要到工厂类中修改代码,利用反射机制就很好的解决了这个问题。
结合反射机制的工厂设计模型
代码实现如下:
package com.cn.test;
interface IMessage{
public void send(String msg);
}
class NewsPaper implements IMessage{
@Override
public void send(String msg) {
System.out.println("【新闻发布:"+msg+"】");
}
}
class NetMessage implements IMessage{
@Override
public void send(String msg) {
System.out.println("【消息发布:"+msg+"】");
}
}
class Factory{ //反射实现工厂类
private Factory(){}
public static IMessage getInstance(String className){
IMessage instance = null;
try {
instance = (IMessage) Class.forName(className).getDeclaredConstructor().newInstance();
} catch (Exception e) { }
return instance;
}
}
public class TestDemo {
public static void main(String[] args) {
IMessage message = Factory.getInstance("com.cn.test.NewsPaper");
message.send("某某新闻");
}
}