重构20-Extract Subclass(提取父类)

当一个类中的某些方法并不是面向所有的类时,可以使用该重构将其迁移到子类中。我这里举的例子十分简单,它包含一个Registration类,该类处理与学生注册课程相关的所有信息。

public class Registration {    public NonRegistrationAction action;

    public Double registrationTotal;

    public String notes;

    public String description;

    public Date registrationDate;}

当使用了该类之后,我们就会意识到问题所在——它应用于两个完全不同的场景。属性NonRegistrationAction和Notes只有在处理与普通注册略有不同的NonRegistration时才会使用。因此,我们可以提取一个子类,并将这两个属性转移到NonRegistration类中,这样才更合适

public class Registration {    public Double registrationTotal;

    public String description;

    public Date registrationDate;}

public class NonRegistration extends Registration{    public NonRegistrationAction action;

    public String notes;}

来自为知笔记(Wiz)

时间: 2024-10-20 02:28:17

重构20-Extract Subclass(提取父类)的相关文章

重构第17天提取父类(Extract SuperClass)

今天的重构来自 Martin Fowler的http://refactoring.com/catalog/extractSuperclass.html. 理解:本文中的“提取父类”是指类中有一些字段或方法,你想把它们提取到父类中以便同一继承层次的其它类也可以访问他们,这个和之前的很多重构有异曲同工之处. 详解:看代码: 重构前代码: 1 public class Dog 2 { 3 public void EatFood() 4 { 5 // eat some food 6 } 7 8 9 pu

重构17-Extract Superclass(提取父类)

当一个类有很多方法希望将它们“提拔”到基类以供同层次的其他类使用时,会经常使用该重构.下面的类包含两个方法,我们希望提取这两个方法并允许其他类使用. public class Dog { public void eatFood() { // eat some food} public void groom() { // perform grooming}} 重构之后,我们仅仅将需要的方法转移到了一个新的基类中.这很类似“Pull Up”重构,只是在重构之前,并不存在基类. public clas

重构第19天 提取工厂类(Extract Factory Class)

理解:本文中的“提取工厂类”是指如果要创建的对象很多,则代码会变的很复杂.一种很好的方法就是提取工厂类. 详解:一般来说我们需要在代码中设置一些对象,以便获得它们的状态,从而使用对象,所谓的设置通常来说就是创建对象的实例并调用对象的方法.有时如果要创建的对象很多,则代码会变的很复杂.这便是工厂模式发挥作用的情形.工厂模式的复杂应用是使用抽象工厂创建对象集,但我们在这里只是使用基本的工厂类创建对象的一个简单应用. 重构前代码: 1 public class PoliceCarController

【解迷糊】关于PHP的extract()函数提取出的变量的作用域问题

真理:该函数提取出的变量遵循 变量作用域 的原则,见下图: 四种情况: class Test { public function dosome() { $arr = ['x' => 'xing', 'y' => 'ya']; extract($arr); } public function get() { return $x; } } $test = new Test(); $test->dosome(); $a = $test->get(); echo $a; //无法打印 $a

重构9-Extract Interface(提取接口)

我们来介绍一个常常被忽视的重构:提取接口.如果你发现多于一个类使用另外一个类的某些方法,引入接口解除这种依赖往往十分有用.该重构实现起来非常简单,并且能够享受到松耦合带来的好处. public class ClassRegistration{ public Double Total;//getter setterpublic void Create() { // create registration code } public void Transfer () { // class trans

【Java重构系列】重构31式之封装集合

2009年,Sean Chambers在其博客中发表了31 Days of Refactoring: Useful refactoring techniques you have to know系列文章,每天发布一篇,介绍一种重构手段,连续发文31篇,故得名“重构三十一天:你应该掌握的重构手段”.此外,Sean Chambers还将这31篇文章[即31种重构手段]整理成一本电子书, 以下是博客原文链接和电子书下载地址: 博客原文:http://lostechies.com/seanchamber

Eclipse 重构功能的使用与重构快捷键

重构是什么? 在代码写好之后改进它的设计. 重构分类:物理结构.类层次结构.类内部结构. 名称 快捷键 直译 作用范围 描述 Rename Alt + Shift + R     可以对任意变量.类.方法.包名.文件夹进行重新命名,并且所有使用到的地方会统一进行修改. Move Alt + Shift + V   字段 把字段移到其他类.把类移到其他包 名称 快捷键 直译 作用范围 描述 Change Method Signature Alt + Shift + C 修改方法签名 方法 对方法进

httprunner学习21-正则表达式提取(extract)与校验(validate)

前言 有些接口返回的并不是json格式的内容,返回的是html或者xml格式的内容,这种就不能用前面的 content.的方法去提取了. httprunner 支持正则表达式提取(extract)参数,也支持正则表达式校验(validate) 返回html 比如我请求博客园的首页https://www.cnblogs.com/yoyoketang/,返回的是应该html格式的内容 接下来我要提取html里面的 <title>上海-悠悠 - 博客园</title> 中间的文字 上海-

《重构——改善既有代码的设计》读书笔记

重构--改善既有代码的设计 1 重构概述 1.1 重构的概念(What) Refactoring 名词:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低修改成本. 动词:使用一系列重构方法,在不改变软件可观察行为的前提下,调整其结构. 1.2 为什么要重构(Why) 改进软件设计 提高代码质量和可读性,使软件系统更易理解和维护 帮助尽早的发现缺陷 提高编程速度 1.3 何时重构(When) 何时重构: 1)随时随地进行. 2)三次法则:第一次做某件事只管去做: