java中factory创建对象的好处

这里先不具体分析工厂模式的详细内容而是讨论为什么要在应用开发的过程中设计工厂这样一个部分;
工厂模式的详细内容十分广泛种类众多请参考更多设计模式的书籍;
在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。
但是这种方式也有不方便的地方:
如果我们创建对象之前要做很多工作,比如获取对象的属性参数值等等 ,也就是说创建目标对象需要一段“过程”,这时我们为了软件设计中的 高内聚低耦合 的理念,简单来说就是让各个模块的功能尽量“纯粹”一点,我们可以利用反射机制和泛型来编写一个工厂类,即我们让工厂去完成创建对象的一系列操作;而在业务代码需要创建该对象时,只需要简单调用相应的方法即可。
在java的api中随处可见名称为***factory的类名,这时一般都有一个或者多个方法来创建目标对象,而不是让开发人员直接去创建对象:

比如SocketFactory这个类中含有四个创建Socket的方法

Socket createSocket() 
创建一个未连接的套接字。
abstract Socket createSocket(InetAddress host, int port) 
创建一个套接字并把它连接到指定地址上的指定端口号。
abstract Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) 
创建一个套接字并把它连接到指定远程端口上的指定远程地址。
abstract Socket createSocket(String host, int port) 
创建一个套接字并把它连接到指定远程主机上的指定远程端口。
abstract Socket createSocket(String host, int port, InetAddress localHost, int localPort
也就是说我们只要实例化了工厂类就可以使用工厂类来实现实例化Socket的目的;使用不同的方法可以创建不同类型的对象,用户再也不用关心整个Socket对象的创建过程,直接使用工厂就完成了对象创建。
附:简单的一个自定义工厂的实现:
public class BeanFactory {

    // 加载配置文件
    private static ResourceBundle bundle;
    static {
        bundle = ResourceBundle.getBundle("instance");
    }
    /**
     * 根据指定的key,读取配置文件获取类的全路径; 创建对象
     * 第一个<T>表示泛型方法 第二个T表示返回值 
     * @return
     */
    public static <T> T getInstance(String key,Class<T> clazz) {
        String className = bundle.getString(key);
        try {
            return (T) Class.forName(className).newInstance();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值