顯示廣告
隱藏 ✕
※ 本文為 xxxx9659.bbs. 轉寄自 ptt.cc 更新時間: 2013-05-01 03:26:39
看板 C_and_CPP
作者 loveme00835 (高髮箍)
標題 Re: [問題] 相似的class中減少code duplication
時間 Sat Apr 27 03:56:28 2013


※ 引述《azureblaze (AzureBlaze)》之銘言:
: 我有兩個class A和B。
: 他們做的事差不多,只在某些細節上不一樣
: 大部分的地方都可以透過拉出一個共同的base class
: 再繼承來解決。
: 不過有些地方可能長這樣
: A::doSomething(){               B::doSomething(){
:   BaseMethod1();                  BaseMethod1();
:   BaseMethod2();
:                                   B_Specific_Operations();
:   A_Specific_Operations();
:                                   BaseMethod2();
:   BaseMethod3();                  BaseMethod3();
: }                               }
把操作抽象化成物件, 操作可以繼承, 資料成員當然也可以繼承.

在父類別裡增加 protected 屬性(一連串操作)以提供子類別使用/修改:

    std::vector< std::function<void()> > steps;

子類別中想增加操作只需要叫用 std::vector<T>::insert():

    steps.insert(
        steps.begin() + N,
        [](){ /* ... */ }
    );

live demo: http://ideone.com/C01TCT

用這招的話不管是遊戲還是遊戲編輯器都可執行時變來變去呢!

再搭配 Factory 生產不同操作集合, 類別間關係就可以更鬆綁.

--
╔═══╗╔═══╗ ╔═╗═╗╔═══╗╔═══╗╔╦═╦╗
金栽經║ ╔╗ ║║ ╔╗ ║╔╗║  ║  ║║  ═  ║║ ╔╗ ║║║  ║║RAINNOUS
≡≡║ ╚╝ ║║ ╚╝ ║║║║      ║║    ╞╣║ ║║ ║║      ║
    ═╣║  ╥  ║║║║  ║  ║║  ═  ║║ ╚╝ ║║  ║  ║
高佑麗╚═╩═╝╚═╩═╝╚╝╚═╚═╝╚═══╝╚═══╝╚═╩═╝鄭允慧
趙賢榮金智淑盧 乙吳勝雅ψmocki

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.221.215
※ 編輯: loveme00835     來自: 140.121.221.215      (04/27 04:00)

--
※ 看板: xxxx9659 文章推薦值: 0 目前人氣: 0 累積人氣: 95 
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇