第十三周 C++設(shè)計(jì)模式 Boolan 李建忠

“對(duì)象性能”模式

  • 面向?qū)ο蠛芎玫慕鉀Q了“抽象”的問(wèn)題瞬沦,但是不可避免地要付出一定的代價(jià)臊泌。對(duì)于通常情況來(lái)講走哺,面向?qū)ο蟮某杀敬蠖伎梢院雎圆挥?jì)怎抛。但是某些情況卑吭,面向?qū)ο笏鶐?lái)的成本必須謹(jǐn)慎處理。
  • 典型模式
    • Singleton
    • Flyweight

Singleton 單件模式

動(dòng)機(jī)(Motivation)

  • 在軟件系統(tǒng)中马绝,經(jīng)常有這樣一些特殊的類(lèi)豆赏,必須保證它們?cè)谙到y(tǒng)中只存在一個(gè)實(shí)例,才能確保它們的邏輯正確性、以及良好的效率掷邦。
  • 如何繞過(guò)常規(guī)的構(gòu)造器白胀,提供一種機(jī)制來(lái)保證一個(gè)類(lèi)只有一個(gè)實(shí)例?
  • 這應(yīng)該是類(lèi)設(shè)計(jì)者的責(zé)任抚岗,而不是使用者的責(zé)任或杠。

模式定義

保證一個(gè)類(lèi)僅有一個(gè)實(shí)例,并提供一個(gè)該實(shí)例的全局訪問(wèn)點(diǎn)宣蔚。
——《設(shè)計(jì)模式》GoF

結(jié)構(gòu)(Structure)

結(jié)構(gòu)

要點(diǎn)總結(jié)

  • Singleton 模式中的實(shí)例構(gòu)造器可以設(shè)置為 protected 以允許子類(lèi)派生向抢。
  • Singleton 模式一般不要支持拷貝構(gòu)造函數(shù)和Clone接口,因?yàn)檫@有可能導(dǎo)致多個(gè)對(duì)象實(shí)例胚委,與 Singleton 模式的初衷違背挟鸠。
  • 如何實(shí)現(xiàn)多線程環(huán)境下安全的Singleton?注意對(duì)雙檢查鎖的正確實(shí)現(xiàn)亩冬。

Flyweight 享元模式

動(dòng)機(jī)(Motivation)

  • 在軟件系統(tǒng)采用純粹對(duì)象方案的問(wèn)題在于大量細(xì)粒度的對(duì)象會(huì)很快充斥在系統(tǒng)中艘希,從而帶來(lái)很高的運(yùn)行時(shí)代價(jià)——主要是指內(nèi)存需求方面的代價(jià)。
  • 如何避免大量細(xì)粒度對(duì)象問(wèn)題的同時(shí)鉴未,讓外部客戶(hù)程序仍然能夠透明地使用面向?qū)ο蟮姆绞絹?lái)進(jìn)行操作枢冤?

模式定義

運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對(duì)象。
——《設(shè)計(jì)模式》GoF

結(jié)構(gòu)(Structure)

結(jié)構(gòu)

要點(diǎn)總結(jié)

  • 面向?qū)ο蠛芎玫亟鉀Q了抽象性的問(wèn)題铜秆,但是作為一個(gè)運(yùn)行在機(jī)器中的程序?qū)嶓w淹真,我們需要考慮對(duì)象的代價(jià)問(wèn)題。Flyweight主要解決面向?qū)ο蟮拇鷥r(jià)問(wèn)題连茧,一般不觸及面向?qū)ο蟮某橄笮詥?wèn)題核蘸。
  • Flyweight 采用對(duì)象共享的作法來(lái)降低系統(tǒng)中對(duì)象的個(gè)數(shù),從而降低細(xì)粒度對(duì)象給系統(tǒng)帶來(lái)的內(nèi)存壓力啸驯。在具體實(shí)現(xiàn)方面客扎,要注意對(duì)象狀態(tài)的處理。
  • 對(duì)象的數(shù)量太大從而導(dǎo)致對(duì)象內(nèi)存開(kāi)銷(xiāo)太大——什么樣的數(shù)量才算大罚斗?這需要我們仔細(xì)的根據(jù)具體的應(yīng)用情況進(jìn)行評(píng)估徙鱼,而不能憑空臆斷。

“狀態(tài)變化”模式

  • 在組件構(gòu)建過(guò)程中针姿,某些對(duì)象的狀態(tài)經(jīng)常面臨變化袱吆,如何對(duì)這些變化進(jìn)行有效的管理?同時(shí)又維持高層模塊的穩(wěn)定距淫?“狀態(tài)變化绞绒?模式為這一問(wèn)題提供了一種解決方案。
  • 典型模式
    • State
    • Memento

Memento 備忘錄

動(dòng)機(jī)(Motivation)

  • 在軟件構(gòu)建過(guò)程中榕暇,某些對(duì)象的狀態(tài)在轉(zhuǎn)換過(guò)程中蓬衡,可能由于某種需要喻杈,要求程序能夠回溯到對(duì)象之前處于某個(gè)點(diǎn)時(shí)的狀態(tài)。如果使用一些公有接口來(lái)讓其他對(duì)象得到對(duì)象的狀態(tài)狰晚,便會(huì)暴露對(duì)象的細(xì)節(jié)實(shí)現(xiàn)筒饰。
    *如何實(shí)現(xiàn)對(duì)象狀態(tài)的良好保存于恢復(fù)?但同時(shí)又不會(huì)因此而破壞對(duì)象本身的封裝性家肯。

模式定義

在不破壞封裝性的前提下龄砰,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)讨衣。這樣以后就可以將該對(duì)象恢復(fù)到原先保存的狀態(tài)换棚。
——《設(shè)計(jì)模式》GoF

結(jié)構(gòu)(Structure)

結(jié)構(gòu)

要點(diǎn)總結(jié)

  • 備忘錄(Memento)存儲(chǔ)原發(fā)器(Originator)對(duì)象的內(nèi)部狀態(tài),在需要時(shí)恢復(fù)原發(fā)器狀態(tài)反镇。
  • Memento 模式的核心是信息隱藏固蚤,即Originator需要向外隱藏信息,保持其封裝性歹茶。但同時(shí)又需要將狀態(tài)保持到外界(Memento)夕玩。
  • 由于現(xiàn)代語(yǔ)言運(yùn)行時(shí)(如C#、Java等)都具有相當(dāng)?shù)膶?duì)象序列化支持惊豺,因此往往采用效率較高燎孟、又較容易正確實(shí)現(xiàn)的序列化方案來(lái)實(shí)現(xiàn)Memento模式。

State 狀態(tài)模式

動(dòng)機(jī)(Motivation)

  • 在軟件構(gòu)建過(guò)程中尸昧,某些對(duì)象的狀態(tài)如果發(fā)生改變揩页,其行為也會(huì)隨之而發(fā)生變化,比如文檔處于只讀狀態(tài)烹俗,其支持的行為和讀寫(xiě)狀態(tài)支持的行為就可能完全不同爆侣。
  • 如何在運(yùn)行時(shí)根據(jù)對(duì)象的狀態(tài)來(lái)透明地更改對(duì)象的行為?而不會(huì)為對(duì)象操作和狀態(tài)轉(zhuǎn)化之間引入緊耦合幢妄?

模式定義

允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為兔仰。從而使對(duì)象看起來(lái)似乎修改了其行為。
——《設(shè)計(jì)模式》GoF

結(jié)構(gòu)(Structure)

結(jié)構(gòu)

Context 和 State 穩(wěn)定
ConcreteState 變化

要點(diǎn)總結(jié)

  • State 模式將所有與一個(gè)特定狀態(tài)相關(guān)的行為都放入一個(gè)State的子類(lèi)對(duì)象中蕉鸳,在對(duì)象狀態(tài)切換時(shí)乎赴,切換相應(yīng)的對(duì)象;但同時(shí)維持State的接口潮尝,這樣實(shí)現(xiàn)了具體操作與狀態(tài)轉(zhuǎn)換之間的解耦无虚。
  • 為不同的狀態(tài)引入不同的對(duì)象使得狀態(tài)轉(zhuǎn)換變得更加明確,而且可以保證不會(huì)出現(xiàn)狀態(tài)不一致的情況衍锚,因?yàn)檗D(zhuǎn)換是原子性的——即要么徹底轉(zhuǎn)換過(guò)來(lái),要么不轉(zhuǎn)換嗤堰。
  • 如果State對(duì)象沒(méi)有實(shí)例變量戴质,那么各個(gè)上下文可以共享同一個(gè)State對(duì)象度宦,從而節(jié)省對(duì)象開(kāi)銷(xiāo)。

“數(shù)據(jù)結(jié)構(gòu)”模式

  • 常常有一些組件在內(nèi)部具有特定的數(shù)據(jù)結(jié)構(gòu)告匠,如果讓客戶(hù)程序依賴(lài)這些特定的數(shù)據(jù)結(jié)構(gòu)戈抄,將極大的破壞組件的復(fù)用。這時(shí)候后专,將這些特定數(shù)據(jù)結(jié)構(gòu)封裝在內(nèi)部划鸽,在外部提供統(tǒng)一的接口,來(lái)實(shí)現(xiàn)與特定數(shù)據(jù)結(jié)構(gòu)無(wú)關(guān)的訪問(wèn)戚哎,是一種行之有效的解決方案裸诽。
  • 典型模式
    • Composite
    • Iterator
    • Chain of Responsibility

Composite模式

動(dòng)機(jī)(Motivation)

  • 在軟件在某些情況下,客戶(hù)代碼過(guò)多地依賴(lài)于對(duì)象容器復(fù)雜的內(nèi)部實(shí)現(xiàn)結(jié)構(gòu)型凳,對(duì)象容器內(nèi)部實(shí)現(xiàn)結(jié)構(gòu)(而非抽象接口)的變化將引起客戶(hù)代碼的頻繁變化丈冬,帶來(lái)代碼的維護(hù)性、擴(kuò)展性等弊端甘畅。
  • 如何將“客戶(hù)代碼與復(fù)雜的對(duì)象容器結(jié)構(gòu)”解耦埂蕊?讓對(duì)象容器自己來(lái)實(shí)現(xiàn)自身的復(fù)雜結(jié)構(gòu),從而使得客戶(hù)代碼就像處理簡(jiǎn)單對(duì)象一樣來(lái)處理復(fù)雜的對(duì)象容器疏唾。

模式定義

將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)蓄氧。Composite使得用戶(hù)對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性(穩(wěn)定)。
——《設(shè)計(jì)模式》GoF

結(jié)構(gòu)(Structure)

結(jié)構(gòu)

要點(diǎn)總結(jié)

  • Composite 模式采用樹(shù)形結(jié)構(gòu)來(lái)實(shí)現(xiàn)普遍存在的對(duì)象容器槐脏,從而將“一對(duì)多”的關(guān)系轉(zhuǎn)化為“一對(duì)一”的關(guān)系喉童,使得客戶(hù)代碼可以一致地(復(fù)用)處理對(duì)象和對(duì)象容器,無(wú)需關(guān)心處理的是單個(gè)的對(duì)象還是組合的對(duì)象容器准给。
  • 將“客戶(hù)代碼與復(fù)雜的對(duì)象容器結(jié)構(gòu)”解耦是Composite的核心思想泄朴,解耦之后,客戶(hù)代碼將與純粹的抽象接口——而非對(duì)象容器的內(nèi)部實(shí)現(xiàn)結(jié)構(gòu)——發(fā)生依賴(lài)露氮,從而更能“應(yīng)對(duì)變化”祖灰。
  • Composite模式在具體實(shí)現(xiàn)中,可以讓父對(duì)象中的子對(duì)象反向追溯畔规;如果父對(duì)象有頻繁的遍歷需求局扶,可使用緩存技巧來(lái)改善效率。

Iterator 迭代器

動(dòng)機(jī)(Motivation)

  • 在軟件構(gòu)建過(guò)程中叁扫,集合對(duì)象內(nèi)部結(jié)構(gòu)常常變化各異三妈。但對(duì)于這些集合對(duì)象,我們希望在不暴露其內(nèi)部結(jié)構(gòu)的同時(shí)莫绣,可以讓外部客戶(hù)代碼透明地訪問(wèn)其中包含的元素畴蒲;同時(shí)這種“透明遍歷”也為“同一種算法在多種集合對(duì)象上進(jìn)行操作”提供了可能。
  • 使用面向?qū)ο蠹夹g(shù)將這種遍歷機(jī)制抽象為“迭代器對(duì)象”為“應(yīng)對(duì)變化中的集合對(duì)象”提供了一種優(yōu)雅的方式对室。

模式定義

提供一種方法順序訪問(wèn)一個(gè)聚合對(duì)象中的各個(gè)元素色徘,而又不暴露(穩(wěn)定)該對(duì)象的內(nèi)部表示。
——《設(shè)計(jì)模式》GoF

結(jié)構(gòu)(Structure)

結(jié)構(gòu)

要點(diǎn)總結(jié)

  • 迭代抽象:訪問(wèn)一個(gè)聚合對(duì)象的內(nèi)容而無(wú)需暴露它的內(nèi)部表示辣辫。
  • 迭代多態(tài):為遍歷不同的集合結(jié)構(gòu)提供一個(gè)統(tǒng)一的接口,從而支持同樣的算法在不同的集合結(jié)構(gòu)上進(jìn)行操作么翰。
  • 迭代器的健壯性考慮:遍歷的同時(shí)更改迭代器所在的集合結(jié)構(gòu),會(huì)導(dǎo)致問(wèn)題辽旋。

在C++里面已經(jīng)過(guò)時(shí)了浩嫌,用泛型取代
Java里面仍然在用

Chain of Responsibility 職責(zé)鏈

動(dòng)機(jī)(Motivation)

  • 在軟件構(gòu)建過(guò)程中,一個(gè)請(qǐng)求可能被多個(gè)對(duì)象處理补胚,但是每個(gè)請(qǐng)求在運(yùn)行時(shí)只能有一個(gè)接收者码耐,如果顯示指定,將必不可少地帶來(lái)請(qǐng)求發(fā)送者與接受者的緊耦合糖儡。
  • 如何使請(qǐng)求的發(fā)送者不需要指定具體的接收者伐坏?讓請(qǐng)求的接收者自己在運(yùn)行時(shí)決定來(lái)處理請(qǐng)求,從而使兩者解耦握联。

模式定義

使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求桦沉,從而避免請(qǐng)求的發(fā)送者和接收者之間的耦合關(guān)系。將這些對(duì)象連成一條鏈金闽,并沿著這條鏈傳遞請(qǐng)求纯露,直到有一個(gè)對(duì)象處理它為止。
——《設(shè)計(jì)模式》GoF

結(jié)構(gòu)(Structure)

結(jié)構(gòu)

Client和Handler穩(wěn)定
ConcreteHandler變化

要點(diǎn)總結(jié)

  • Chain of Responsibility 模式的應(yīng)用場(chǎng)合在于“一個(gè)請(qǐng)求可能有多個(gè)接收者代芜,但是最后真正的接收者只有一個(gè)”埠褪,這時(shí)候請(qǐng)求發(fā)送者與接收者的耦合有可能出現(xiàn)“變化脆弱”的癥狀,職責(zé)鏈的目的就是將二者解耦挤庇,從而更好地應(yīng)對(duì)變化钞速。
  • 應(yīng)用了 Chain of Responsibility 模式后,對(duì)象的職責(zé)分派將更具靈活性嫡秕。我們可以在運(yùn)行時(shí)動(dòng)態(tài)添加/修改請(qǐng)求的處理職責(zé)渴语。
  • 如果請(qǐng)求傳遞到職責(zé)鏈的末尾仍得不到處理,應(yīng)該有一個(gè)合理的缺省機(jī)制昆咽。這也是每一個(gè)接受對(duì)象的責(zé)任驾凶,而不是發(fā)出請(qǐng)求的對(duì)象的責(zé)任。

“行為變化”模式

  • 在組件的構(gòu)建過(guò)程中掷酗,組件行為的變化經(jīng)常導(dǎo)致組件本身劇烈的變化调违。“行為變化”模式將組件的行為和組件本身進(jìn)行解耦泻轰,從而支持組件行為的變化技肩,實(shí)現(xiàn)兩者之間的松耦合。
  • 典型模式
    • Command
    • Visitor

Command 命令模式

動(dòng)機(jī)(Motivation)

  • 在軟件構(gòu)建過(guò)程中浮声,“行為請(qǐng)求者”與“行為實(shí)現(xiàn)者”通常呈現(xiàn)一種“緊耦合”亩鬼。但在某些場(chǎng)合——比如需要對(duì)行為進(jìn)行“記錄殖告、撤銷(xiāo)/重做(undo/redo)、事務(wù)”等處理雳锋,這種無(wú)法抵御變化的緊耦合是不適合的。
  • 在這種情況下羡洁,如何將“行為請(qǐng)求者”與“行為實(shí)現(xiàn)者”解耦玷过?將一組行為抽象為對(duì)象,可以實(shí)現(xiàn)二者之間的松耦合筑煮。

模式定義

將一個(gè)請(qǐng)求(行為)封裝為一個(gè)對(duì)象辛蚊,從而使你可以用不同的請(qǐng)求對(duì)客戶(hù)進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志真仲,以及支持可撤銷(xiāo)的操作袋马。
——《設(shè)計(jì)模式》GoF

結(jié)構(gòu)(Structure)

結(jié)構(gòu)

Command 穩(wěn)定
ConcreteCommand 變化

要點(diǎn)總結(jié)

  • Command 模式的根本目的在于將“行為請(qǐng)求者”與“行為實(shí)現(xiàn)者”解耦,在面向?qū)ο笳Z(yǔ)言中秸应,常見(jiàn)的實(shí)現(xiàn)手段是“將行為抽象為對(duì)象”虑凛。
  • 實(shí)現(xiàn)Command接口的具體命令對(duì)象ConcreteCommand有時(shí)候根據(jù)需要可能會(huì)保存一些額外的狀態(tài)信息。通過(guò)使用Composite模式软啼,可以將多個(gè)“命令”封裝為一個(gè)“復(fù)合命令”MacroCommand桑谍。
  • Command 模式與C++中的函數(shù)對(duì)象有些類(lèi)似。但兩者定義行為接口的規(guī)范有所區(qū)別:Command以面向?qū)ο笾械摹敖涌?實(shí)現(xiàn)”來(lái)定義行為接口規(guī)范祸挪,更嚴(yán)格锣披,但有性能;C++函數(shù)對(duì)象以函數(shù)簽名來(lái)定義行為接口規(guī)范贿条,更靈活雹仿,性能更高。

Visitor 訪問(wèn)器

動(dòng)機(jī)(Motivation)

  • 在軟件構(gòu)建過(guò)程中整以,由于需求的改變胧辽,某些類(lèi)層次結(jié)構(gòu)中常常需要增加新的行為(方法),如果直接在基類(lèi)中做這樣的更改悄蕾,將會(huì)給子類(lèi)帶來(lái)很繁重的變更負(fù)擔(dān)票顾,甚至破壞原有設(shè)計(jì)。
  • 如何在不更改類(lèi)層次結(jié)構(gòu)的前提下帆调,在運(yùn)行時(shí)根據(jù)需要透明地為類(lèi)層次結(jié)構(gòu)上的各個(gè)類(lèi)動(dòng)態(tài)添加新的操作奠骄,從而避免上述問(wèn)題?

模式定義

表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中的各元素的操作番刊。使得可以在不改變(穩(wěn)定)各元素的類(lèi)的前提下定義(擴(kuò)展)作用于這些元素的新操作(變化)含鳞。
——《設(shè)計(jì)模式》GoF

結(jié)構(gòu)(Structure)

結(jié)構(gòu)

Element ConcreteElement Visitor穩(wěn)定
ConcreteVisitor變化

要點(diǎn)總結(jié)

  • Visitor 模式通過(guò)所謂雙重分發(fā)(double dispatch)來(lái)實(shí)現(xiàn)在不更改(不添加新的操作-編譯時(shí))Element類(lèi)層次結(jié)構(gòu)的前提下,在運(yùn)行時(shí)透明地為類(lèi)層次結(jié)構(gòu)上的各個(gè)類(lèi)動(dòng)態(tài)添加新的操作(支持變化)芹务。
  • 所謂雙重分發(fā)即Visitor模式中間包括了兩個(gè)多態(tài)分發(fā)(注意其中的多態(tài)機(jī)制):第一個(gè)為accept方法的多態(tài)辨析蝉绷;第二個(gè)為visitElementX方法的多態(tài)辨析鸭廷。
  • Visitor模式的做大缺點(diǎn)在于擴(kuò)展類(lèi)層次結(jié)構(gòu)(增添新的Element子類(lèi)),會(huì)導(dǎo)致Visitor類(lèi)的改變熔吗。因此Visitor模式適用于“Element類(lèi)層次結(jié)構(gòu)穩(wěn)定辆床,而其中的操作卻經(jīng)常面臨頻繁改動(dòng)”。

“領(lǐng)域規(guī)則”模式

  • 在特定領(lǐng)域中桅狠,某些變化雖然頻繁讼载,但可以抽象為某種規(guī)則。這時(shí)候中跌,結(jié)合特定領(lǐng)域咨堤,將問(wèn)題抽象為語(yǔ)法規(guī)則,從而給出在該領(lǐng)域下的一般性解決方案漩符。
  • 典型模式
    • Interpreter

Interpreter 解析器

動(dòng)機(jī)(Motivation)

  • 在軟件構(gòu)建過(guò)程中一喘,如果某一特定領(lǐng)域的問(wèn)題比較復(fù)雜,類(lèi)似的結(jié)構(gòu)不斷重復(fù)出現(xiàn)嗜暴,如果使用普通的編程方法來(lái)實(shí)現(xiàn)將面臨非常頻繁的變化凸克。
  • 在這種情況下,將特定領(lǐng)域的問(wèn)題表達(dá)為某種語(yǔ)法規(guī)則下的句子灼伤,然后構(gòu)建一個(gè)解釋器來(lái)解釋這樣的句子触徐,從而達(dá)到解決問(wèn)題的目的。
Paste_Image.png

模式定義

給定一個(gè)語(yǔ)言狐赡,定義它的文法的一種表示撞鹉,并定義一種解釋器,這個(gè)解釋器使用該表示來(lái)解釋語(yǔ)言中的句子颖侄。
——《設(shè)計(jì)模式》GoF

結(jié)構(gòu)(Structure)

結(jié)構(gòu)

要點(diǎn)總結(jié)

  • Interpreter模式的應(yīng)用場(chǎng)合是Interpret模式應(yīng)用中的難點(diǎn)鸟雏,只有滿(mǎn)足“業(yè)務(wù)規(guī)則頻繁變化,且類(lèi)似的結(jié)構(gòu)不斷重復(fù)出現(xiàn)览祖,并且容易抽象為語(yǔ)法規(guī)則的問(wèn)題”才適合使用Interpreter模式孝鹊。
  • 使用Interpreter模式來(lái)表示文法規(guī)則,從而可以使用面向?qū)ο蠹记蓙?lái)方便地“擴(kuò)展”文法展蒂。
  • Interpreter模式比較適合簡(jiǎn)單的文法表示又活,對(duì)于復(fù)雜的文法表示,Interpreter模式會(huì)產(chǎn)生比較大的類(lèi)層次結(jié)構(gòu)锰悼,需要求助于語(yǔ)法分析生成器這樣的標(biāo)準(zhǔn)工具柳骄。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市箕般,隨后出現(xiàn)的幾起案子耐薯,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曲初,死亡現(xiàn)場(chǎng)離奇詭異体谒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)臼婆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)抒痒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人颁褂,你說(shuō)我怎么就攤上這事评汰。” “怎么了痢虹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)主儡。 經(jīng)常有香客問(wèn)我奖唯,道長(zhǎng),這世上最難降的妖魔是什么糜值? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任丰捷,我火速辦了婚禮,結(jié)果婚禮上寂汇,老公的妹妹穿的比我還像新娘病往。我一直安慰自己,他們只是感情好骄瓣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布停巷。 她就那樣靜靜地躺著,像睡著了一般榕栏。 火紅的嫁衣襯著肌膚如雪畔勤。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天扒磁,我揣著相機(jī)與錄音庆揪,去河邊找鬼。 笑死妨托,一個(gè)胖子當(dāng)著我的面吹牛缸榛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兰伤,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼内颗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了医清?” 一聲冷哼從身側(cè)響起起暮,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后负懦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體筒捺,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年纸厉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了系吭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颗品,死狀恐怖肯尺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躯枢,我是刑警寧澤则吟,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站锄蹂,受9級(jí)特大地震影響氓仲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜得糜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一敬扛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朝抖,春花似錦啥箭、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至炼七,卻和暖如春缆巧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豌拙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工陕悬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人按傅。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓捉超,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親唯绍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拼岳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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