面向?qū)ο笾信c解耦(Boolan)

看侯捷老師的課程講羡榴,面對(duì)對(duì)象的類的組織關(guān)系有三種匀归,組合坑资,委托,和繼承穆端。

組合:一個(gè)類“有一個(gè)”另一個(gè)類型的實(shí)例作為成員盐茎,如

class A {
  B b;
}

委托:一個(gè)類有另一個(gè)類的實(shí)例的指針類型作為成員,如

class A {
  B *b
}    

繼承:一個(gè)類徙赢,是另一個(gè)類的一種派生, 如

class A:public B{}

作為一個(gè)java程序員字柠,組合和繼承是常常用的,只是對(duì)委托這種東西不是很理解狡赐。
這篇文章結(jié)合java對(duì)委托做一個(gè)解析

委托模式下類成員就是java里說(shuō)的接口

在java web中的業(yè)務(wù)一般都會(huì)分為:表現(xiàn)層窑业,業(yè)務(wù)邏輯層,數(shù)據(jù)訪問(wèn)層枕屉。
其中業(yè)務(wù)邏輯層處理業(yè)務(wù)邏輯常柄,有必要時(shí)調(diào)用數(shù)據(jù)訪問(wèn)層操作數(shù)據(jù)庫(kù)的數(shù)據(jù)。
比如一個(gè)商城系統(tǒng)要獲取一條訂單信息有關(guān)的業(yè)務(wù)邏輯層的類可能是下面這樣

// 業(yè)務(wù)邏輯層處理訂單信息的類
class OrderServiceImp {
 // 數(shù)據(jù)訪問(wèn)層委托對(duì)象
 OrderDao orderDao;
 Order getById(int id) { return orderDao.getById(id); }
}

這個(gè)orderDao在java里是個(gè)接口搀擂,在c++里實(shí)際就是存放的基類指針西潘。這就引出下面的話題。

委托的目的:解耦

上面說(shuō)的orderDao它的代碼都是抽象的哨颂,用c++表示就是它的成員函數(shù)都是virtual xxx = 0;
這樣做有什么好處呢喷市,小標(biāo)題里也說(shuō)了,解耦威恼。
OrderDao只對(duì)外提供增刪改查方法的接口品姓,不必展示內(nèi)部的細(xì)節(jié),OrderService將一些操作“委托”給OrderDao箫措,也不必糾結(jié)于OrderDao的實(shí)現(xiàn)細(xì)節(jié)腹备。
使用時(shí),只需讓orderDao“指針”指向自己寫的派生類斤蔓,假如今天我用mysql作為數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)植酥,明天用oracle,只需使用時(shí)讓OrderService的成員指針指向繼承了OrderDao的派生類弦牡,同樣的代碼就展現(xiàn)出了不同的效果(c++有個(gè)規(guī)定友驮,派生類向基類的自動(dòng)類型轉(zhuǎn)換只對(duì)指針或引用類型有效。)

沒(méi)代碼說(shuō)個(gè)XX

今天狀態(tài)不太好喇伯,總感覺(jué)表達(dá)不出來(lái)我真正想說(shuō)的喊儡,還是上一段代碼吧拨与,模擬一段情景稻据。
假如我要做一個(gè)游戲,一開(kāi)始沒(méi)有美工,只好用ascii字符表示人物捻悯,場(chǎng)景匆赃,物品。有個(gè)控制ui的類

class UI {
  virtual void draw();
}

我的地圖類成員包含一個(gè)UI類的指針今缚,當(dāng)生成地圖時(shí)調(diào)用draw函數(shù)繪制地圖

class Map {
public:
  void draw() { ui->draw(); }
  void setup(UI *u) { ui = u; }
private:
  UI *ui;
}

使用ascii字符的界面

class AsciiUI:public UI {
  void draw() override {
    // 打印界面
  }
}

在游戲主程序里算柳,我要生成地圖

int main() {
  Map p;
  AsciiUI a;
  p.setup(a);
  p.draw();
}

這樣,一個(gè)ascii界面地圖就生成了姓言。

現(xiàn)在投資商來(lái)投了一個(gè)億瞬项,我請(qǐng)了個(gè)美工,畫出超牛的3d地圖何荚。那我現(xiàn)在要將畫出地圖囱淋,人物,菜單餐塘,物品等等界面都改為畫3d的妥衣,我要改寫所有類的代碼嗎?還好不用戒傻,我只需要修改UI的派生類Ascii税手,或者重新寫一個(gè)派生類,這樣的話需纳,甚至游戲程序的其他部分都不知道界面有改變芦倒,業(yè)務(wù)邏輯等等都可以直接使用。

class 3dUI:public UI {
  void draw() override { ... }
}

這樣將自己的任務(wù)可以分離出來(lái)的地方不翩,委派給別人的思想熙暴,實(shí)際上就是面對(duì)對(duì)象設(shè)計(jì)的核心要素高內(nèi)聚,低耦合的體現(xiàn)

在設(shè)計(jì)類時(shí)只要把握住這個(gè)核心要素慌盯,其他都是實(shí)現(xiàn)它的小技巧而已周霉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市亚皂,隨后出現(xiàn)的幾起案子俱箱,更是在濱河造成了極大的恐慌,老刑警劉巖灭必,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狞谱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡禁漓,警方通過(guò)查閱死者的電腦和手機(jī)跟衅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)播歼,“玉大人伶跷,你說(shuō)我怎么就攤上這事。” “怎么了叭莫?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蹈集,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我雇初,道長(zhǎng)拢肆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任靖诗,我火速辦了婚禮郭怪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刊橘。我一直安慰自己移盆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布伤为。 她就那樣靜靜地躺著咒循,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绞愚。 梳的紋絲不亂的頭發(fā)上叙甸,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音位衩,去河邊找鬼裆蒸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛糖驴,可吹牛的內(nèi)容都是我干的僚祷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼贮缕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辙谜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起感昼,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤装哆,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后定嗓,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蜕琴,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年宵溅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凌简。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恃逻,死狀恐怖雏搂,靈堂內(nèi)的尸體忽然破棺而出藕施,到底是詐尸還是另有隱情,我是刑警寧澤畔派,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布铅碍,位于F島的核電站润绵,受9級(jí)特大地震影響线椰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尘盼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一憨愉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卿捎,春花似錦配紫、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至底桂,卻和暖如春植袍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背籽懦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工于个, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人暮顺。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓厅篓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親捶码。 傳聞我的和親對(duì)象是個(gè)殘疾皇子羽氮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容