A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

接口:
public interface Dao {
    void add();
}

两个实现类:public class MySQLDao  implements Dao{
    public void add() {
        System.out.println("调用了MySQLDao.add()");
    }
}

public class OracleDao implements Dao {
    public void add() {
        System.out.println("调用了OracleDao.add()");
    }
}

工厂类:public class MyFactory {
    private static Properties prop = new Properties();
    static {
        try {
            prop.load(MyFactory.class.getResourceAsStream("/impl.properties"));
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public static Object getObject(String name){
        try {
            String className = prop.getProperty(name);
            Class<?> clazz = Class.forName(className);
            Object obj = clazz.getConstructor().newInstance();

            return obj;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("创建对象异常");
        }
    }
}

测试类:public class Test1 {
    public static void main(String[] args) {
        Dao mysqlDao = (Dao) MyFactory.getObject("mysqlDao");
        mysqlDao.add();
        Dao oracleDao = (Dao) MyFactory.getObject("oracleDao");
        oracleDao.add();


    }
}
测试结果:调用了MySQLDao.add()调用了OracleDao.add()

总结:工厂模式,可以理解为:有了很多个工厂方法,自己需要调用哪个类,就调用当前类的工厂方法,获取相应的具体实例。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马