代码编织梦想

重构对象-Inline Class将类内联化四

1.将类内联化

1.1.使用场景

Inline Class (154)将类内联化正好与Extract Class (149)提炼类相反。如果一个类不再承担足够责任、不再有单独存在的理由(这通常是因为此前的重构动作移走了这个类的责任),我就会挑选这一“萎缩类”的最频繁用户(也是个类),以Inline Class (154)手法将“萎缩类”塞进另一个类中。

1.2.如何做

  • 在目标类身上声明源类的public协议,并将其中所有函数委托至源类。
  • 如果“以一个独立接口表示源类函数”更合适的话,就应该在内联之前先使用Extract Interface (341)。
  • 修改所有源类引用点,改而引用目标类。
  • 将源类声明为private,以斩断包之外的所有引用可能。同时修改源类的名称,这便可使编译器帮助你捕捉到所有对于源类的隐藏引用点。
  • 编译,测试。
  • 运用Move Method (142)和Move Field (146),将源类的特性全部搬移到目标类。
  • 删除原类
  • 编译,测试

1.3.示例

下面程序有两个类,Person类负责创建人对象。TelephoneNumber类负责管理电话号码。现在将TelephoneNumber类放到Person类中。

 class Person...
   public String getName() {
       return _name;
   }
   public String getTelephoneNumber(){
       return _officeTelephone.getTelephoneNumber();
   }
   TelephoneNumber getOfficeTelephone() {
       return _officeTelephone;
   }
   private String _name;
   private TelephoneNumber _officeTelephone = new TelephoneNumber();
 class TelephoneNumber...
   public String getTelephoneNumber() {
       return ("(" + _areaCode + ") " + _number);
   }
   String getAreaCode() {
       return _areaCode;
   }
   void setAreaCode(String arg) {
       _areaCode = arg;
   }
   String getNumber() {
       return _number;
   }
   void setNumber(String arg) {
       _number = arg;
   }
   private String _number;
   private String _areaCode;

首先我在Person中声明TelephoneNumber的所有可见public函数

 class Person...
   String getAreaCode() {
       return _officeTelephone.getAreaCode();        //译注:请注意其变化
   }
   void setAreaCode(String arg) {
       _officeTelephone.setAreaCode(arg);                //译注:请注意其变化
   }
   String getNumber() {
       return _officeTelephone.getNumber();        //译注:请注意其变化
   }
   void setNumber(String arg) {
       _officeTelephone.setNumber(arg);                //译注:请注意其变化
   }

现在,我要找出TelephoneNumber的所有用户,让它们转而使用Person接口。

Person martin = new Person();
martin.getOfficeTelephone().setAreaCode ("781");

上面代码替换为下面的代码,直接使用Person对象中的方法。同时删除上面的方法

 Person martin = new Person();
 martin.setAreaCode ("781");

现在,我可以持续使用Move Method 和 Move Field ,直到TelephoneNumber不复存在。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_38039437/article/details/129624526

inline class (将类内联化)_chuilizhan6639的博客-爱代码爱编程

Summary:  某个类没有做太多事情。将这个类的所有特性搬移到另一个类,然后移除原类。 Motivation:   Inline Class 正好与Extract Class相反。如果一个类不再承担足够责任、不再有单独存在的理由(这通常是因为此前的重构动作移走了这个类的责任),我们就应该挑选这一“萎缩类”的最

重构笔记-重构函数-爱代码爱编程

文章目录 重构函数Extract Method 提炼函数Inline Method 内联函数Inline Temp 内联临时变量Replace Temp with Query 以查询取代临时变量Introduce E

重构手法--对象内-爱代码爱编程

重构手法–对象内 Extract Method(提炼函数) 将一段需要加注释的函数放进一个独立函数中,并让函数名称解释该函数的用途,因为函数约简短被复用的机会就越大。重构前的代码: void printOwing(){ Enumeration e = _order.elements(); double outstanding = 0.0;

重构手法--对象间-爱代码爱编程

重构手法–对象间 其实很多重构手法都是成对出现的,需要根据使用场景进行正向或逆向的重构,以达到提高代码可阅读性、增强代码复用性和可扩展性的目的 Move Method(搬移函数) 你的程序中,有个函数与其所驻类之外的另一个类进行更多交流:调用后者,或被后者调用在该函数最常引用的类中建立一个有着类似行为的新函数。将旧函数变成一个单纯的委托函数,或是将旧

idea代码重构技巧--抽取+内联_左撇子帕布的博客-爱代码爱编程

1. 抽取 在做代码重构时,可能发现我们需要将变量,参数做抽取,或者某个方法过长,需要将这个方法中相同逻辑的代码块抽取出一个独立的函数,这时候就需要使用抽取,抽取有三类: 抽变量,IDEA快捷键 CTRL+ALT+V抽参数,IDEA快捷键 CTRL+ALT+P抽函数,IDEA快捷键 CTRL+ALT+M 示例代码: package com.colin

虚函数(virtual)可以是内联函数(inline)吗?_虚函数可以是内联的吗-爱代码爱编程

先说结论,虚函数可以是内联函数,内联是可以修饰虚函数的,但当虚函数表现多态性的时候不能内联。   解释:内联是在编译期建议编译器内联,而虚函数的多态性在运行期,编译器无法知道运行期调用哪个代码,因此虚函数表现为多态性时(即运行期)不能内联。    inline virtual唯一可以内联的时候是:编译器知道所调用的对象是哪个类(Base::who())