DateFormat

DateFormat是java设计模式简单工厂模式的一个典型例子
如下面代码

public final static DateFormat getDateInstance();
public final static DateFormat getDateInstance(int style);
public final static DateFormat getDateInstance(int style,Locale aLocale);

DateFormat是抽象类,刚看这些方法可能会很困惑,抽象类不能有自己的实例,但这三个方法貌似违反这一规定
其实不然,这三个方法都是静态的,而不是普通方法
getDateInstance()方法做了一些有趣的事情,一是运用多态性;二是使用静态工厂方法
一、仔细阅读getDateInstance()方法源码可以发现该方法返回的是其子类SimpleDateFormat的一个实例,这是纯正的多态性原则的运用
二、getDateFormat()方法是静态方法。如果是非静态的会怎样?如果是非静态方法,客户端必须取得该类的子类或者实例。而这个类是抽象的,不可能有自己的实例,所以客户端需要获取该类的子类的实例,如果客户端获取子类的实例了,那么还需要这个工厂方法干什么?
使用静态方法是为了把子类实例化的工作隐藏起来,从而客户端不需要关心子类是怎么实例化的,因为DateFormat会提供它合适的子类的实例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值