Introduce Local Extension(引入本地扩展)

17.Introduce Local Extension(引入本地扩展) - 图1

做法

  • 建立一个扩展类,将它作为原始类的子类或包装类

  • 在扩展类中加入转型构造函数

    所谓”转型构造函数”是指”接受原对象作为参数”的构造函数。如果采用子类化方案,那么转型构造函数应该调用适当的超类构造函数;如果采用包装类方案,那么转型构造函数应该将它得到的传入参数以实例变量的形式保存起来,用作接受委托的原对象

  • 在扩展类中加入新特性

  • 根据需要,将原对象替换为扩展对象

  • 将针对原始类定义的所有外加函数搬移到扩展类中

范例:使用子类

  1. class MfDateSub extends Date{
  2. public MfDateSub(String dateString){
  3. super(dateString);
  4. }
  5. public MfDateSub(Date arg){
  6. super(arg.getTime());
  7. }
  8. Date nextDay(){
  9. return new Data(getYear(), getMonth(), getDate() + 1);
  10. }
  11. }
  12. MfDateSub mfDateSub = new MfDateSub(previousEnd);
  13. Data newStart = mfDateSub.nextDay();

范例:使用包装类

  1. class MfDateWrap{
  2. private Date _original;
  3. public MfDateWrap(String dateString){
  4. _original = new Date(dateString);
  5. }
  6. public MfDateWrap(Date arg){
  7. _original = arg;
  8. }
  9. public int getYear(){
  10. return _original.getYear();
  11. }
  12. public int getMonth(){
  13. return _original.getMonth();
  14. }
  15. public int getDate(){
  16. return _original.getDate();
  17. }
  18. Date nextDay(){
  19. return new Data(getYear(), getMonth(), getDate() + 1);
  20. }
  21. }
  22. MfDateWrap mfDateWrap = new MfDateWrap(previousEnd);
  23. Data newStart = mfDateWrap.nextDay();