優(yōu)雅編程之這樣重構(gòu)對象,你就“正常”了(二十一)

開心一笑

【我從上學(xué)以來到現(xiàn)在,一直有2個(gè)問題……
問題一:
為什么每次問爸媽要東西的時(shí)候,他們就會說:你還??;
可是每當(dāng)我們犯了錯(cuò)誤的時(shí)候,他們卻說:你都這么大了……
問題二:
為什么剛到某個(gè)學(xué)校老師會說:別害怕,把學(xué)校當(dāng)成你的家;
可一旦我們犯了錯(cuò),老師又說:這么放肆,你當(dāng)學(xué)校是你家啊…】

提出問題

項(xiàng)目中如何重構(gòu)對象???

解決問題

勵(lì)志圖片

以下來自《重構(gòu)》這本書的幾點(diǎn)總結(jié)和自己的一點(diǎn)心得:

Move Method(搬移函數(shù))

“搬移函數(shù)”是重構(gòu)理論的支柱。如果一個(gè)類有太多行為,或如果一個(gè)類與另一個(gè)類有太多合作而形成高度耦合,就會搬移函數(shù)。

Move Field(搬移字段)

如果一個(gè)字段,在其所駐類之外的另一個(gè)類中有更多函數(shù)使用了它,就會考慮搬移這個(gè)字段。

Extract Class(提煉類)

某個(gè)類做了應(yīng)該由兩個(gè)類做的事,建立一個(gè)新類,將相關(guān)的字段和函數(shù)從舊類搬移到新類。

Inline Class(將類內(nèi)聯(lián)化)

某個(gè)類沒有做太多的事情,將這個(gè)類的所有特性搬移到另一個(gè)類中,然后移除原類。

Hide Delegate(隱藏“委托關(guān)系”)

客戶通過一個(gè)委托類調(diào)用另一個(gè)對象。在服務(wù)類上建立客戶所需的所有函數(shù),用以隱藏委托關(guān)系。

例一:

/**
 * 金錢
 */
class Money{

    public String getFlowers(){
        return "999玫瑰";
    }
}

/**
 * 帥哥
 */
class Boy{

    Money money;

    public Money getMoney() {
        return money;
    }

    public void setMoney(Money money) {
        this.money = money;
    }
}

/**
 * 美女
 */
class Girl{

}

男孩想買花給女孩的話,需要這么調(diào)用:boy.getMone().getFlowers();

重構(gòu):

class Boy{

    Money money;

    public Money getMoney() {
        return money;
    }

    public void setMoney(Money money) {
        this.money = money;
    }
    //委托關(guān)系在這里,金錢是萬惡之源,要隱藏起來,啦啦啦
    String getFlowers(){
        return money.getFlower();
    }
}

Remove Middle Man(移除中間人)

某個(gè)類做了過多的簡單委托動作。讓客戶直接調(diào)用受托類。

事實(shí)上,一個(gè)類承受太多的委托類,這時(shí)作者建議我們?nèi)コ虚g人,直接調(diào)用Money類。

Introduce Foreign Method(引入外加函數(shù))

你需要為提供服務(wù)的類增加一個(gè)函數(shù),但你無法修改這個(gè)類。在客戶端類建立一個(gè)函數(shù),并以第一參數(shù)形式傳入一個(gè)服務(wù)類實(shí)例。

Introduce Local Extension(引入本地?cái)U(kuò)展)

你需要為服務(wù)類提供一些額外函數(shù),但你無法修改這個(gè)類:建立一個(gè)新類,使他包含這些額外函數(shù)。讓這個(gè)擴(kuò)展品成為源類的子類或包裝類。

例二:

子類重構(gòu):

//男孩每天要做的事情很多,很累,他不希望別人再破壞他這些行為
  //但是他又希望有人來幫助他,于是有了UtilsBoy
  class Boy{

      public String engagement(){
          return "約會中";
      }

      public String sayLove(){
          //女友要求中英文都要說一遍
          return "我愛你(I Love You!)";
      }

      public String loveCall(){
          //女友要求中英文都要說一遍
          return "晚安(Good Night)";
      }

      //以下省略一萬個(gè)方法

  }

  //該類是男孩的子類,
  class UtilsBoy extends Boy{

      public UtilsBoy(){
          //構(gòu)造方法需要委托給男孩
          super();
      }

      public  String getFlower(){
          return "999玫瑰";
      }

      //在這個(gè)方法中,我們可以擴(kuò)展男孩所需的技能
      //一下省略一萬個(gè)幫助男孩追女孩方法
  }

  //幸福的女孩,什么都不用做
  class Girl{

  }

**包裝重構(gòu):如何包裝重構(gòu)就不說了!??!

讀書感悟

來自《遇見未知的自己》

  • 不管你有多愛他(她),多余的擔(dān)心是最差的禮物,不如給他(她)祝福!
  • 什么樣的人最有魅力?我愈來愈覺得,答案就是,內(nèi)心有力量的人。什么叫做“有內(nèi)在力量”?就是遇到困難,碰上痛苦時(shí),能夠坦然與自己的負(fù)面情緒相處。困難大家都有,痛苦每個(gè)人也不缺,只要是人,這些都是不可避免的。但內(nèi)在力量強(qiáng)大的人可以不受苦。
  • 所有發(fā)生在我們身上的事件都是一個(gè)經(jīng)過仔細(xì)包裝的禮物。只要我們愿意面對它有時(shí)候有點(diǎn)丑惡的包裝,帶著耐心和勇氣一點(diǎn)一點(diǎn)地拆開包裝的話,我們會驚喜地看到里面珍藏的禮物。
  • 一旦那個(gè)令你快樂的事情不復(fù)存在,你的快樂也隨之消失。而喜悅不同,它是由內(nèi)向外的綻放,從內(nèi)心深處油然而生。

其他

如果有帶給你一絲絲小快樂,就讓快樂繼續(xù)傳遞下去,歡迎轉(zhuǎn)載,點(diǎn)贊,頂,歡迎留下寶貴的意見,多謝支持!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 《重構(gòu)》讀書筆記 總覽 第一部分 第一章從實(shí)例程序出發(fā),展示設(shè)計(jì)的缺陷,對其重構(gòu)可以了解重構(gòu)的過程和方法。 第二部...
    白樺葉閱讀 2,537評論 2 5
  • 在對對象的設(shè)計(jì)過程中,“決定把責(zé)任放在哪兒”即使不是最重要的事,也是最重要的事情之一。 1 Move Method...
    hklbird閱讀 586評論 0 1
  • 一個(gè)項(xiàng)目運(yùn)行久了,經(jīng)過業(yè)務(wù)需求的迭代,開發(fā)人員的變更,總會產(chǎn)生一些質(zhì)量不高的代碼,要么來源于對某些業(yè)務(wù)理解的不太深...
    高廣超閱讀 1,497評論 0 23
  • 閱讀《重構(gòu)》的筆記獻(xiàn)上。 重構(gòu)的定義 重構(gòu)是在不改變軟件可觀察行為的前提下改善其內(nèi)部結(jié)構(gòu)。 重構(gòu)的節(jié)奏 以微小的步...
    陳宇明閱讀 11,757評論 13 64
  • 每個(gè)人在他人的風(fēng)景里都是過客,但是一旦遇上那些有趣的人,就要盡力地讓過客變成熟客,熟客再常常來他的世界中做客,最后...
    楠風(fēng)Dawn閱讀 106評論 0 0

友情鏈接更多精彩內(nèi)容