通过反射优化工厂模式

来源:互联网 发布:nba2017球员数据 编辑:程序博客网 时间:2024/05/17 23:23

1.工厂模式

工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=newA() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

具体内容见另一篇博客

2.不足

当增加一个子类的时候需要修改工厂类,这样很麻烦

3.利用反射改进

思路:工厂类通过反新的子类的路径,并使用getInstace()方法来获取一个类的实例。
实现
package com.learn.controller;public class Factory {    public static void main(String[] as) throws IllegalAccessException, InstantiationException, ClassNotFoundException {            man m = reflectFactory.getInstance("com.learn.controller.Chinese");            System.out.println(m.sayHello());    }}interface man {    String sayHello();}class Chinese implements man {    public String sayHello() {        return "nihao";    }}class Waiguoren implements man {    public String sayHello() {        return "hello";    }}class reflectFactory{    public static man getInstance(String mantype) throws ClassNotFoundException, IllegalAccessException, InstantiationException {        man man = null;        man = (man) Class.forName(mantype).newInstance();        return man;    }}

运行结构如下:

nihao

4.结合属性文件优化

思路: 把所有类的完整路径都写到文件里然后读文件传入工厂类中去只想say()函数
实现:

先假装读到了配置文件保存在了一个数组中,就是下面的mans数组

public class Factory {    static String[] mans = new String[]{            "com.learn.controller.Chinese",            "com.learn.controller.Waiguoren"    };    public static void main(String[] as) throws IllegalAccessException, InstantiationException, ClassNotFoundException {        man m = reflectFactory.getInstance(mans[0]);        System.out.println(m.sayHello());    }}
运行结果:

你猜【尴尬脸】

5.结合注解优化

待更新

0 0
原创粉丝点击