博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Practical API Design学习笔记】工厂方法由于构造函数
阅读量:6882 次
发布时间:2019-06-27

本文共 1287 字,大约阅读时间需要 4 分钟。

原因:

1、工厂方法返回的实例不一定是该类的实例,可以是它的子类的实例。但是构造函数只能new出该类的实例;

2、工厂方法创建的对象可以缓存,以便下次使用,构造函数不可以;

3、对于同步的控制,工厂方法可以将创建对象前后的代码进行统一处理,构造函数就无能为力了;

4、工厂方法支持参数化返回类型,构造函数不支持。

例如:

在java1.5之前,我们有以下代码:

public final class Template extends Object {  private final Class type;  public Template(Class type) { this.type = type; }  public Class getType() { return type; }  public Template() { this(Object.class); }}
java1.5加入了泛型,因此,我们改写上面的代码为:
public final class Template
extends Object { private final Class
type; public Template(Class
type) { this.type = type; } public Class
getType() { return type; } // now what!? public Template() { this(Object.class); }}
这个类的最后一个函数有问题,不能编译通过。

如果一开始设计时就用工厂方法,就没有这个问题了。我们知道,最后一个函数想返回的是Template<Object>对象实例,如下:

public final class Template
extends Object { private final Class
type; public Template(Class
type) { this.type = type; } public Class
getType() { return type; } @Deprecated @SuppressWarnings("unchecked") public Template() { this((Class
)Object.class); } public static Template
create() { return new Template(Object.class); }}

转载于:https://my.oschina.net/tingzi/blog/135575

你可能感兴趣的文章
linux sort,uniq,cut,wc命令详解收录
查看>>
Android内存管理之道
查看>>
想在未来,做在当前
查看>>
深入理解JVM—JVM内存模型
查看>>
Oracle体系结构和用户管理
查看>>
聊一聊 Python 2 中的编码
查看>>
使用sass绘制三角形
查看>>
mina中多个filter中decode出现的问题
查看>>
关于list
查看>>
OSX 10.09上的common lisp环境搭建
查看>>
Centos 6.5安装oracle 11g
查看>>
Browser和Server持续同步的几种方式(jQuery+tornado演示)
查看>>
软件工程概述
查看>>
hibernate延迟加载内幕
查看>>
MySQL创建连接原始方法
查看>>
JVM调优总结(这个总结得比较全面)
查看>>
把备份集中数据恢复到另一个数据库(数据库名不同)
查看>>
linux源码安装iostat,dstat,systat的方法
查看>>
什么?What?调用系统的相册和相机的时候,系统按钮全是这种小白块,到底什么鬼??...
查看>>
从一个实例看java,new一个对象时的初始化顺序
查看>>