概述
这里先不具体分析工厂模式的详细内容而是讨论为什么要在应用开发的过程中设计工厂这样一个部分;
工厂模式的详细内容十分广泛种类众多请参考更多设计模式的书籍;
在面向对象编程中, 最通常的方法是一个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 |
附:简单的一个自定义工厂的实现:
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);
}
}
}
|
最后
以上就是懵懂歌曲为你收集整理的java中factory创建对象的好处的全部内容,希望文章能够帮你解决java中factory创建对象的好处所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复