您当前的位置: 首页 > 

梁云亮

暂无认证

  • 3浏览

    0关注

    1191博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

工厂设计模式在项目中的实际应用

梁云亮 发布时间:2020-01-22 10:15:51 ,浏览量:3

代码结构图

在这里插入图片描述

代码:
  • Dao层
public interface UserDao {
    void fun();
}
public class UserDaoImpl implements UserDao {
    @Override
    public void fun() {
        System.out.println("dao fun");
    }
}
  • Service层
public interface UserService {
    void sth();
}
public class UserServiceImpl implements UserService{

    private UserDao userDao = ObjectFactory. getFactory().getInstance(UserDao.class);

    @Override
    public void sth() {
        userDao.fun();
    }
}
  • 工厂类
public class ObjectFactory {
    private static ObjectFactory factory = new ObjectFactory();
    private  ObjectFactory(){
    }
    public static ObjectFactory getFactory(){
        return factory;
    }
    private  static Properties properties = null;

    static {
        properties = new Properties();
        InputStream is = ObjectFactory.class.getResourceAsStream("/factory.properties");
        try {
            properties.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //获取实现类的对象
    public   T getInstance(Class clazz){
        //根据字节码获取到接口名
        String interfaceName = clazz.getSimpleName();
        //根据接口名,从属性文件中读取到实现类的完整名字
        String implentName = properties.getProperty(interfaceName);
        T instance = null;
        try {
            //获取实现类的字节码
            Class tmp = Class.forName(implentName);
            //根据字节码,利用反射技术生成对象
            instance = (T)tmp.getDeclaredConstructor().newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return  instance;
    }
    public static void main(String[] args) {
        UserDao userDao = ObjectFactory.getFactory().getInstance(UserDao.class);
        userDao.fun();
    }
}
  • 测试代码
public class DemoTest {
    private UserService userService = ObjectFactory.getFactory().getInstance(UserService.class);

    public static void main(String[] args) {
        DemoTest obj = new DemoTest();
        obj.userService.sth();
    }
}
关注
打赏
1665023148
查看更多评论
立即登录/注册

微信扫码登录

0.1062s