专栏首页java架构师重构学习笔记

重构学习笔记

这里仅仅是做了个总结,相当于速查手册。

1、对集合封装

集合,比如List<XXX> ,如果做为返回值,那也就把其自身所拥有的Add,Remove等方法暴漏了出去。如果对于调用方,仅仅是对其暴露展示功能,可以进行如下封装:

    private List<OrderLine> _orderLines; public IEnumerable<OrderLine> OrderLines         { get { return _orderLines; }         }

它只包含一个GetEnumerator()方法。

2、移动方法

移动方法是一个很简单也很常见的重构,只要是系统就会存在很多类,那么类里面包括很多方法,如果一个方法经常被另外一个类使用(比本身的类使用还多)或者这个方法本身就不应该放在这个类里面,那么这个适合应该考虑把它移到合适的类中。

点评:以上是原文,个人观点,这个概念真的不是这么表象。众所周知,我们的程序,为什么分层?数据层、逻辑层、UI层、Common....

为了结构清晰、为了复用,为了扩展方便等等诸多理由

如果真如作者所说,那我们岂不是又回到从前了吗?

这个也就是仅仅针对于个别局部方法(套用了局部变量和全局变量的概念)适用罢了。

3、提升方法

提升方法是指将一个很多继承类都要用到的方法提升到基类中。这个重构要根据具体情况使用,如果不是每个子类都有这个方法的话,可以考虑使用接口或者其他方式。

点评:接口也未必能行,如果不是每个子类都有这个方法,那接口一旦定义了,就要在这些不相干的子类中进行“假实现”。

还是没太理解作者的想法。因为这种行为,对于大多数人来说,是肯定会用的,毕竟避免重复代码的引申义就是减少工作量嘛。

后来看到一个回复,说的比较好:这个重构要根据具体情况使用,如果不是每个子类都有这个方法的话,可以考虑使用接口或者其他方式。

 4、下降方法

同时如果在父类Animal 中如果没有其他的字段或者公用方法的话,可以考虑把Bark方法做成一个接口,从而去掉Animal 类。

点评:这个真不敢完全认同了。我如果这样做了,我就要对外即公布接口,又公布具体实现类,为了一点的优化而改变了设计结构,得不偿失的感觉。

5、提升字段

把子类公用的字段提升到基类中,从而达到公用的目的。这样提的前提是这些子类有一个基类或者有很多相似的字段和方法,不然为了一个字段而单独建立一个抽象类是不可取的,所以这个就需要具体权衡。

点评:这个可以有,经常用到。

6、降低字段

本文中的降低字段和前篇的提升字段正好相反,就是把基类中只有某些少数类用到的字段降低到使用它们的子类中。

这样做的好处可以简化基类,同时让其他没有使用它的子类也变得更加简单,如果这样的字段比较多的话,使用此重构也能节约一部分内存。

 7、重命名

改名(方法,类,参数)是指在写代码的时候对类、方法、参数、委托、事件等等元素取一个有意义的名称

点评:这个的确如此。有时候在做项目时,感觉这个起名,真不是意见简单的事,既要让自己明白,还要让别人明白,照顾各方面。长了不行,短了也有问题。诸如此类,流汗。

8、 使用委派代替继承

本文中的“使用委派代替继承”是指在根本没有父子关系的类中使用继承是不合理的,可以用委派的方式来代替。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Windows平台下安装Hadoop

    1、安装JDK1.6或更高版本   官网下载JDK,安装时注意,最好不要安装到带有空格的路径名下,例如:Programe Files,否则在配置Hadoop的配...

    小端
  • Windows平台下安装Hadoop

      官网下载JDK,安装时注意,最好不要安装到带有空格的路径名下,例如:Programe Files,否则在配置Hadoop的配置文件时会找不到JDK(按相关说...

    小端
  • C# 多线程

     Thread类的使用: 初始化: Thread th1 = new Thread(function1); Thread th2 = new Thread(ne...

    小端
  • 设计原则

    把会变化的代码抽离并且封装起来,以后可以轻易改动这部分代码,而不会影响不需要变化的代码。

    用户5325874
  • js 函数function用法

    javascript 函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的。通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传...

    阳光岛主
  • 继承、接口与多态的相关问题

    继承:通过继承实现代码复用。Java中所有的类都是通过直接或间接地继程java.lang.Object类得到的。继承而得到的类称为子类,被继承的类称为父类。子类...

    哲洛不闹
  • 升级Xcode8之后快捷键无法注释

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

    用户1451823
  • 6大设计原则之里氏替换原则

    如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子...

    烟草的香味
  • Spring源码之解析并注册BeanDefinition(一)

    最近有空把Spring加载bean流程复习了一下,也乘机可以做个整理.首先还是看下入口代码,本文主要讲解析及注册BeanDefinition整体加载流程:

    LiosWong
  • overload和override

    说实话,这两个没有什么可比较的,概念相差那么大,但是很多笔试题之类的还喜欢考。只是长的像了一点而已。

    MickyInvQ

扫码关注云+社区

领取腾讯云代金券