【Java】根据不同的业务标识创建不同的业务对象有什么设计模式吗

nju.拈花 2019-02-02 02:56:09
我要搞一个框架,需要根据不同的业务标识创建不同的模型对象,比如bizSpec是case的时候创建CaseRowData对象,bizSpec是casetype的时候创建CaseTypeRowData对象,我是期望我提供一个抽象类,然后别人的**RowData扩展我这个类,实现一个getRegisterationKey接口,自动注册"key-类型"到我的框架内部的RowDataCreatorDelegate的一个ConcurrentHashMap里,然后框架的其他地方使用delegate传入key直接取到模型class然后通过反射实例化,但是有个问题是如果我把注册的逻辑放到构造函数里做,在调delegate的创建实例前其实是没有RowData实例的,注册中心里并没有信息;如果放到static代码块里,也不行,因为在这种模式下用户自己扩展的类在调delegate.create前并没有加载,注册中心里还是没有信息。
各位大佬有没有什么办法呢???
...全文
1269 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44648630 2019-02-11
  • 打赏
  • 举报
回复
Student stu=new Student();
Class<?> c1=stu.getClass();//方式一
Class<Student> c2= Student.class;//方式二
Class<?> c3=null;
try {
c3=Class.forName("org.reflect.Class.Student"); // 方式三
} catch (ClassNotFoundException e) {
e.printStackTrace();
写法 正确吗?
winrh 2019-02-10
  • 打赏
  • 举报
回复
动态代理应该对你有所帮助
yn_leopard 2019-02-10
  • 打赏
  • 举报
回复
工厂模式,抽像工厂,了解一下
开拓者Amadues 2019-02-06
  • 打赏
  • 举报
回复
看上去你这个框架的作用就是根据输入Class参数,返回对象,其实也就是根据动态的类型创建对象。 是需要用到反射的,但是反射也不是必须有实例才能反射的,你看看这个。
package org.reflect.Class;

import java.lang.reflect.Modifier;
public class ClassDemo {

    public static void main(String[] args) {
        Student stu=new Student();
        Class<?> c1=stu.getClass();//方式一
        Class<Student> c2= Student.class;//方式二
        Class<?> c3=null;
        try {
            c3=Class.forName("org.reflect.Class.Student");   // 方式三
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println("方式一获取的Class对象为:"+c1.getSimpleName());
        System.out.println("方式二获取的Class对象为:"+c2);
        System.out.println("方式三获取的Class对象为:"+c3);
        int mod=c1.getModifiers();//获取修饰符所对应的整数
        String modifier=Modifier.toString(mod);//获取修饰符
        System.out.println(c1+"类所用的修饰符为:"+modifier);
    }
}

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧