設(shè)計(jì)模式總結(jié)

一军援、創(chuàng)建型模式(Creational Patterns)

1. 工廠方法(Factory Method)
1.1 意圖(Intent):

Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.
定義一個(gè)用于創(chuàng)建對(duì)象的接口坏平,但是讓子類決定實(shí)例化哪一個(gè)類兼蕊。工廠方法使一個(gè)類的實(shí)例化延遲到其子類。

  • 工廠方法中的角色:
    Product:抽象產(chǎn)品
    ConcreteProduct:具體產(chǎn)品
    Factory:抽象工廠
    ConcreteFactory:具體工廠
1.2 適用場(chǎng)景:

(1)如果無法預(yù)知對(duì)象的確切類別及其依賴關(guān)系時(shí)晾浴,可以考慮使用工廠方法语婴;
工廠方法將創(chuàng)建產(chǎn)品的代碼與實(shí)際使用產(chǎn)品的代碼分離,從而能在不影響其他代碼的情況下愧薛,擴(kuò)展創(chuàng)建產(chǎn)品部分的代碼;
(2)如果你希望用戶能擴(kuò)展你的軟件庫或框架的內(nèi)部組件衫画,可使用工廠方法毫炉;
(3)如果你希望使用現(xiàn)有對(duì)象來節(jié)省系統(tǒng)資源,而不是每次都重新創(chuàng)建對(duì)象削罩,可使用工廠方法瞄勾;
工廠方法可以返回緩存、對(duì)象池或其他來源的已有對(duì)象弥激。

1. 優(yōu)點(diǎn)
  1. 避免創(chuàng)建者和具體產(chǎn)品之間的緊密耦合进陡;
  2. 單一職責(zé)原則:將產(chǎn)品創(chuàng)建代碼放在程序的單一位置,從而使代碼更容易維護(hù)微服;
  3. 開閉原則:無須改變現(xiàn)有的客戶端代碼趾疚,就可以在程序中引入新的產(chǎn)品類型;
  • 缺點(diǎn)
  1. 需要引入許多新的子類以蕴, 代碼可能會(huì)因此變得更復(fù)雜糙麦。 最好的情況是將該模式引入創(chuàng)建者類的現(xiàn)有層次結(jié)構(gòu)中。
2. 抽象工廠(Abstract Factory)
  • 意圖(Intent):
    Provide an interface for creating families of related or dependent objects without specifying their concrete classes.
    提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴的對(duì)象的接口丛肮,而無需指定它們具體的類赡磅。
  • 抽象工廠中的角色
    抽象工廠(Abstract Factory)
    具體工廠(Concrete Factory)
    抽象產(chǎn)品(Abstract Product)
    ——聲明同一種類型的產(chǎn)品接口;
    具體產(chǎn)品(Concrete Product)
    —— 定義一個(gè)被相應(yīng)的具體工廠創(chuàng)建的產(chǎn)品對(duì)象宝与。
  • 適用場(chǎng)景:
    簡(jiǎn)單工廠模式針對(duì)的是一個(gè)產(chǎn)品等級(jí)結(jié)構(gòu)(即繼承自同一種抽象產(chǎn)品的體系)焚廊,而抽象工廠針對(duì)的是多個(gè)產(chǎn)品等級(jí)結(jié)構(gòu)。
    對(duì)于新增加的產(chǎn)品族伴鳖,只需要對(duì)應(yīng)增加一個(gè)新的具體工廠即可节值,對(duì)已有代碼無須做任何修改。
  • 優(yōu)缺點(diǎn):
    ① 分離了具體的類榜聂;
    ② 可以很方便的動(dòng)態(tài)更換產(chǎn)品族
    只要更換具體工廠搞疗,就可以做到更換產(chǎn)品族(product families),因?yàn)橐粋€(gè)具體工廠會(huì)創(chuàng)建一整個(gè)產(chǎn)品族(a complete family of products)须肆。
    系統(tǒng)中有多于一個(gè)的產(chǎn)品族匿乃,而每次只使用其中某一個(gè)產(chǎn)品族。
    ③ 有利于保持產(chǎn)品的一致性
    屬于同一個(gè)產(chǎn)品族的產(chǎn)品將在一起使用豌汇,這一約束必須在系統(tǒng)的設(shè)計(jì)中體現(xiàn)出來幢炸。
    ④ 添加新的產(chǎn)品類型比較困難,因?yàn)锳bstractFactory接口確定了所有可以被創(chuàng)建的產(chǎn)品集合拒贱,支持新種類的產(chǎn)品就需要擴(kuò)展該工廠接口宛徊,這將涉及AbstractFactory及其所有子類的更改佛嬉。
    當(dāng)Abstract Factory模式中每一種具體工廠類只創(chuàng)建一個(gè)產(chǎn)品對(duì)象時(shí),也就是只存在一個(gè)產(chǎn)品體系結(jié)構(gòu)時(shí)闸天,退化為Factory Method模式暖呕;
    當(dāng)Factory Method模式中抽象工廠與具體工廠合并,提供一個(gè)統(tǒng)一的工廠來創(chuàng)建對(duì)象苞氮,并將創(chuàng)建對(duì)象的工廠設(shè)計(jì)為靜態(tài)方法時(shí)湾揽,就退化為Simple Factory模式;
3. 生成器(Builder)

意圖(Intent):
Separate the construction of a complex object from its representation so that the same construction process can create different representations.
將一個(gè)復(fù)雜對(duì)象的構(gòu)建(construction )與它每一過程中的實(shí)現(xiàn)細(xì)節(jié)分離笼吟,使得同樣的構(gòu)建過程可以創(chuàng)建(create)出不同類型(types )和形式(representations)的產(chǎn)品對(duì)象库物。


image.png
4. 原型(Prototype)

意圖(Intent):
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.
用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過拷貝這些原型創(chuàng)建新的對(duì)象贷帮。

5. 單例(Singleton)

意圖(Intent):
Ensure a class only has one instance, and provide a global point of access to it.
保證一個(gè)類僅有一個(gè)實(shí)例戚揭,并提供一個(gè)訪問它的全局訪問點(diǎn)。

二皿桑、結(jié)構(gòu)型模式(Structural Patterns)

6. 適配器(Adapter)

6.1 Intent
Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.
將一個(gè)類的接口轉(zhuǎn)化成客戶端希望的另一個(gè)接口毫目。Adaper模式使得接口不兼容的類可以一起工作。
6.2 與其它模式的關(guān)系:

  • Bridge VS Adapter
    Bridge模式通常會(huì)于開發(fā)前期進(jìn)行設(shè)計(jì)诲侮, 使你能夠?qū)⒊绦虻母鱾€(gè)部分獨(dú)立開來以便開發(fā)镀虐。 而Adapter模式通常在已有程序中使用, 讓相互不兼容的類能很好地合作沟绪。


    Adapter Pattern.png
  • Adaper VS Decorator
    Adapter修改了已有對(duì)象的接口刮便;
    Decorator則是在不改變對(duì)象接口的情況下,強(qiáng)化(enhance)了其功能绽慈。
    Decorator還支持遞歸組合恨旱,而Adapter則無法實(shí)現(xiàn)。

  • Adapter VS Proxy VS Decorator
    Adapter為被封裝對(duì)象(wrapped object)提供了不同的接口坝疼;
    Proxy則為其提供了相同的接口搜贤,Decorator則能為其提供加強(qiáng)的接口(enhanced interface)。

  • Facade VS Adapter
    Facade為已有對(duì)象定義了一個(gè)新接口钝凶,而Adaper則盡力使得已有接口可復(fù)用仪芒。Adapter通常只封裝一個(gè)對(duì)象, 而Facade通常作用在整個(gè)子系統(tǒng)的對(duì)象上耕陷。

  • Bridge VS State VS Strategy
    他們的共同點(diǎn)是都基于組合來實(shí)現(xiàn)代碼結(jié)構(gòu)掂名。

7. 橋接(Bridge)

Decouple an abstraction from its implementation so that the two can vary independently.
將抽象部分與它的實(shí)現(xiàn)部分分離,使兩者可以獨(dú)立的變化哟沫。
當(dāng)在兩個(gè)獨(dú)立維度的層次結(jié)構(gòu)中使用繼承擴(kuò)展類時(shí)饺蔑,將導(dǎo)致代碼復(fù)雜程度指數(shù)增長。橋接模式通過將繼承改為組合的方式來解決這個(gè)問題嗜诀。 具體來說猾警, 就是抽取其中一個(gè)維度孔祸、只持有它的抽象引用,具體的實(shí)現(xiàn)部分可以動(dòng)態(tài)替換肿嘲。
適用場(chǎng)景:

  1. 如果你想要拆分或重組一個(gè)具有多重功能的龐雜類 (例如能與多個(gè)數(shù)據(jù)庫服務(wù)器進(jìn)行交互的類)融击, 可以使用橋接模式筑公。
    類的代碼行數(shù)越多雳窟, 弄清其運(yùn)作方式就越困難, 對(duì)其進(jìn)行修改所花費(fèi)的時(shí)間就越長匣屡。 一個(gè)功能上的變化可能需要在整個(gè)類范圍內(nèi)進(jìn)行修改封救, 而且常常會(huì)產(chǎn)生錯(cuò)誤, 甚至還會(huì)有一些嚴(yán)重的副作用捣作。
    橋接模式可以將龐雜類拆分為幾個(gè)類層次結(jié)構(gòu)誉结。 此后, 你可以修改任意一個(gè)類層次結(jié)構(gòu)而不會(huì)影響到其他類層次結(jié)構(gòu)券躁。 這種方法可以簡(jiǎn)化代碼的維護(hù)工作惩坑, 并將修改已有代碼的風(fēng)險(xiǎn)降到最低。
  2. 如果你希望在幾個(gè)獨(dú)立維度上擴(kuò)展一個(gè)類也拜, 可使用該模式以舒。
    橋接建議將每個(gè)維度抽取為獨(dú)立的類層次。 初始類將相關(guān)工作委派給屬于對(duì)應(yīng)類層次的對(duì)象慢哈, 無需自己完成所有工作蔓钟。
  3. 如果你需要在運(yùn)行時(shí)切換不同實(shí)現(xiàn)方法, 可使用橋接模式卵贱。
解決方案
Bridge Pattern.png
8. 組合(Composite)

Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.
將對(duì)象組合成樹狀結(jié)構(gòu)滥沫、以表示“部分-整體”的層次結(jié)構(gòu)。Composite使得用戶可以相同的方式對(duì)待單個(gè)對(duì)象和復(fù)雜對(duì)象的組合(容器對(duì)象)键俱。

9. 裝飾(Decorator)

Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.
通過將對(duì)象(Wrappee Object)放入特殊封裝對(duì)象(Wrapper Objects)為原對(duì)象增加新的行為兰绣。


Decorator pattern.png
10. 外觀(Facade)

Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.
為包含許多活動(dòng)部件的復(fù)雜子系統(tǒng)提供一個(gè)簡(jiǎn)單的接口。Facade定義了一個(gè)更高層次的接口编振、使得子系統(tǒng)更加易用缀辩。

11. 享元(Flyweight)

Use sharing to support large numbers of fine-grained objects efficiently.
享元是一種結(jié)構(gòu)型設(shè)計(jì)模式, 它允許你在消耗少量內(nèi)存的情況下支持大量對(duì)象党觅。模式通過共享多個(gè)對(duì)象的部分狀態(tài)來實(shí)現(xiàn)上述功能雌澄。 換句話來說, 享元會(huì)將不同對(duì)象的相同數(shù)據(jù)進(jìn)行緩存以節(jié)省內(nèi)存杯瞻。

12. 代理(Proxy)

Provide a surrogate or placeholder for another object to control access to it.
為源對(duì)象提供一個(gè)替代品或占位符镐牺,以實(shí)現(xiàn)對(duì)源對(duì)象的控制。
代理模式適合應(yīng)用場(chǎng)景:

  1. 延遲初始化(虛擬代理)
    如果你有一個(gè)偶爾使用的重量級(jí)服務(wù)對(duì)象魁莉,一直保持該對(duì)象運(yùn)行會(huì)消耗系統(tǒng)資源時(shí)睬涧,可使用代理模式募胃。
  2. 訪問控制(保護(hù)代理)
    如果你只希望特定客戶端使用服務(wù)對(duì)象,這里的對(duì)象可以是操作系統(tǒng)中非常重要對(duì)的部分畦浓,而客戶端則是各種已啟動(dòng)的程序(包括惡意程序)痹束,此時(shí)可使用代理模式。代理可僅在客戶端憑據(jù)滿足要求時(shí)將請(qǐng)求傳遞給服務(wù)對(duì)象讶请。
  3. 本地執(zhí)行遠(yuǎn)程服務(wù)(遠(yuǎn)程代理)
    適用于服務(wù)對(duì)象位于遠(yuǎn)程服務(wù)器上的情形祷嘶,代理通過網(wǎng)絡(luò)傳遞客戶端請(qǐng)求,負(fù)責(zé)處理所有與網(wǎng)絡(luò)相關(guān)的復(fù)雜細(xì)節(jié)夺溢。
  4. 記錄日志請(qǐng)求(日志記錄代理)
    適用于當(dāng)你需要保存對(duì)于服務(wù)對(duì)象的請(qǐng)求歷史記錄時(shí)论巍。 代理可以在向服務(wù)傳遞請(qǐng)求前進(jìn)行記錄。
  5. 緩存結(jié)果代理(緩存代理)
    適用于需要緩存客戶請(qǐng)求結(jié)果并對(duì)緩存生命周期進(jìn)行管理時(shí)风响, 特別是當(dāng)返回結(jié)果的體積非常大時(shí)嘉汰。代理可對(duì)重復(fù)請(qǐng)求所需的相同結(jié)果進(jìn)行緩存, 還可使用請(qǐng)求參數(shù)作為索引緩存的鍵值状勤。
  6. 智能引用
    代理會(huì)將所有獲取了指向服務(wù)對(duì)象或其結(jié)果的客戶端記錄在案鞋怀。 代理會(huì)時(shí)不時(shí)地遍歷各個(gè)客戶端, 檢查它們是否仍在運(yùn)行持搜。 如果相應(yīng)的客戶端列表為空密似, 代理就會(huì)銷毀該服務(wù)對(duì)象, 釋放底層系統(tǒng)資源朵诫。
  • 與其它模式的關(guān)系
    Adaper能為封裝對(duì)象(wrapped object)提供不同的接口辛友;Proxy能為封裝對(duì)象提供相同的接口;Decorator則能為之提供加強(qiáng)的接口剪返。
    Facade與Proxy的相似之處在于它們都緩存了一個(gè)復(fù)雜實(shí)體( complex entity)并且按照自己的方式進(jìn)行實(shí)例化废累;不同之處是代理與其服務(wù)對(duì)象遵循同一接口, 使得自己和服務(wù)對(duì)象可以互換脱盲。
    Decorator與Proxy的不同之處在于代理通常自行管理其服務(wù)對(duì)象的生命周期邑滨,然后Decorator中裝飾器的組合通常用客戶端來控制。

三钱反、行為模式(BehavioralPatterns)

13. 職責(zé)鏈(Chain Of Responsibility)

Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.
職責(zé)鏈允許你將請(qǐng)求沿著處理者鏈進(jìn)行發(fā)送掖看。 收到請(qǐng)求后, 每個(gè)處理者均可對(duì)請(qǐng)求進(jìn)行處理面哥, 或?qū)⑵鋫鬟f給鏈上的下個(gè)處理者哎壳。
責(zé)任鏈會(huì)將特定行為(particular behaviors)轉(zhuǎn)化為稱為處理者(handles)的獨(dú)立對(duì)象。模式建議你將這些處理者連成一條鏈尚卫。 鏈上的每個(gè)處理者都持有下一處理者的引用(reference)归榕。 除了處理請(qǐng)求外, 處理者還負(fù)責(zé)沿著鏈傳遞請(qǐng)求吱涉。 請(qǐng)求會(huì)在鏈上移動(dòng)刹泄, 直至所有處理者都有機(jī)會(huì)對(duì)其進(jìn)行處理外里。處理者可以決定不再沿著鏈傳遞請(qǐng)求, 這可高效地取消所有后續(xù)處理步驟特石。

14. 命令(Command)

Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.
將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象盅蝗,從而使可以將請(qǐng)求作為函數(shù)的參數(shù)傳遞、延遲請(qǐng)求執(zhí)行或者將其放入隊(duì)列中姆蘸、記錄請(qǐng)求日志墩莫,以及支持撤銷操作。

15. 解釋器(Interpreter)

Given a language, define a represention for its grammar along with an interpreter that uses the representation to interpret sentences in the language.
給定一種語言乞旦,定義它的語法的一種表示贼穆,同時(shí)定義一個(gè)解釋器(interpreter),該解釋器使用定義好的語法表示(grammar represention)來解釋語言中的句子兰粉。

16. 迭代器(Iterator)

Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
在不暴露一個(gè)聚合對(duì)象(aggregate object)的內(nèi)部表示形式的情況下,有序訪問集合中的各個(gè)元素顶瞳。
Iterator的主要思想是將集合的遍歷行為提取為稱為iterator的獨(dú)立對(duì)象玖姑。
應(yīng)用場(chǎng)景:

  1. 當(dāng)集合背后為復(fù)雜的數(shù)據(jù)結(jié)構(gòu), 且你希望對(duì)客戶端隱藏其復(fù)雜性時(shí) (出于使用便利性或安全性的考慮)慨菱, 可以使用迭代器模式焰络。
  2. 使用該模式可以減少程序中重復(fù)的遍歷代碼。
  3. 如果你希望代碼能夠遍歷不同的甚至是無法預(yù)知的數(shù)據(jù)結(jié)構(gòu)符喝, 可以使用迭代器模式闪彼。
17. 中介者(Mediator)

Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently.
用一個(gè)中介對(duì)象來封裝一系列對(duì)象的交互。Mediator使得各對(duì)象不需要顯式的相互引用协饲,從而使其松散耦合畏腕,而且可以獨(dú)立地改變它們之間的交互。
中介者讓一個(gè)程序的不同組件(components)通過特殊的Mediator對(duì)象進(jìn)行間接的溝通茉稠,從而減少組件間的相互依賴描馅。
中介者讓你能在單個(gè)中介者對(duì)象中封裝多個(gè)對(duì)象間的復(fù)雜關(guān)系網(wǎng)。類所擁有的依賴關(guān)系越少而线,就越易于修改铭污、擴(kuò)展和復(fù)用。

適用場(chǎng)景:

  1. 當(dāng)一些對(duì)象和其他對(duì)象緊密耦合以致難以對(duì)其進(jìn)行修改時(shí)膀篮,可使用中介者模式嘹狞;
  2. 當(dāng)組件因過于依賴其他組件,而無法在不同應(yīng)用中復(fù)用時(shí)誓竿,可使用中介者模式磅网;
  3. 如果為了能在不同情景下復(fù)用一些基本行為, 導(dǎo)致你需要被迫創(chuàng)建大量組件子類時(shí)烤黍, 可使用中介者模式知市。
18. 備忘錄(Memento)

Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later.
在不破壞封裝性的前提下傻盟,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)嫂丙,這樣以后就可以將該對(duì)象恢復(fù)到原來保存的狀態(tài)娘赴。

19. 觀察者(Observer)

Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.

20. 狀態(tài)(State)

Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.
允許一個(gè)對(duì)象在它的內(nèi)部狀態(tài)改變時(shí)改變其行為,使其看上去就行改變了自身所屬的類一樣跟啤。
該模式將與狀態(tài)相關(guān)的行為抽取到獨(dú)立的狀態(tài)類中诽表, 讓原對(duì)象將工作委派給這些類的實(shí)例, 而不是自行進(jìn)行處理隅肥。


State pattern.png
21. 策略(Strategy)

Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
定義一系列算法竿奏,將每一個(gè)算法封裝起來,并使它們可以相互替換腥放。策略模式讓算法獨(dú)立于使用它的客戶而變化泛啸。

22. 模板方法(Template Method)

Define the skeleton of an algorithm in an operation, deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
在超類中定義了一個(gè)算法的框架,允許子類在不修改結(jié)構(gòu)的情況下重寫算法的特定步驟秃症。
應(yīng)用場(chǎng)景:
當(dāng)你希望客戶端只是擴(kuò)展某個(gè)特定的步驟候址、而不是整個(gè)算法或其結(jié)構(gòu)時(shí),可使用模板方法模式种柑。
在將算法轉(zhuǎn)化為模板方法時(shí)岗仑,你可將相似的步驟提取到超類中以去除重復(fù)的代碼,子類間各不同的代碼可繼續(xù)保留在各子類中聚请。
實(shí)現(xiàn)方式:

  1. 分析目標(biāo)算法荠雕,確定能否將其拆分為多個(gè)步驟,從所有子類的角度出發(fā)驶赏,考慮哪些步驟能夠通用炸卑,哪些步驟各不相同;
  2. 創(chuàng)建抽象基類并聲明一個(gè)模板方法母市、和代表算法步驟的一系列抽象方法矾兜,在模板方法中根據(jù)算法結(jié)構(gòu)依次調(diào)用相應(yīng)步驟,可用final修飾模板方法以防止子類對(duì)其進(jìn)行重寫患久。
  3. 雖然可將所有步驟全都設(shè)為抽象類型椅寺, 但默認(rèn)實(shí)現(xiàn)可能會(huì)給部分步驟帶來好處, 因?yàn)樽宇悷o需實(shí)現(xiàn)那些方法蒋失。
  4. 可考慮在算法的關(guān)鍵步驟之間添加鉤子返帕。
  5. 為每個(gè)算法變體新建一個(gè)具體子類, 它必須實(shí)現(xiàn)所有的抽象步驟篙挽, 也可以重寫部分可選步驟荆萤。
23. 訪問者(Visitor)

Represent an operation to be performed on the elements of an object structure.Visitor lets you define a new operation without changing the classes of the elements on which it operates.
允許你在不修改已有代碼的情況下,向已有類層次結(jié)構(gòu)中增加新的行為。
Visitor模式建議將新行為放在一個(gè)稱為Visitor的獨(dú)立類中链韭,而不是試圖將其整合到已有類中偏竟。需要執(zhí)行操作的源對(duì)象(original object )將作為參數(shù)傳遞給Visitor的方法的,從而使改方法能訪問源對(duì)象的一切必要數(shù)據(jù)敞峭。
Visitor類可以定義一組 (而不是一個(gè)) 方法踊谋, 且每個(gè)方法可接收不同類型的參數(shù)。


visitor_pattern.png

實(shí)現(xiàn)方式:

  1. 在Visitor接口中聲明一組“訪問”方法旋讹,分別對(duì)應(yīng)程序中的每個(gè)具體元素類殖蚕;
  2. 聲明Element接口,在其中添加“accept”方法沉迹,接收一個(gè)Visitor對(duì)象作為參數(shù)睦疫。
  3. 在所有具體的Concrete Element類中實(shí)現(xiàn)“accept”方法,這些方法必須將調(diào)用重定向到Visitor對(duì)象的的visitXXX方法中鞭呕,其中visitXXX方法的參數(shù)為當(dāng)前的Concrete Element類蛤育。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市琅拌,隨后出現(xiàn)的幾起案子缨伊,更是在濱河造成了極大的恐慌,老刑警劉巖进宝,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異枷恕,居然都是意外死亡党晋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門徐块,熙熙樓的掌柜王于貴愁眉苦臉地迎上來未玻,“玉大人,你說我怎么就攤上這事胡控“饨耍” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵昼激,是天一觀的道長庇绽。 經(jīng)常有香客問我,道長橙困,這世上最難降的妖魔是什么瞧掺? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮凡傅,結(jié)果婚禮上辟狈,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好哼转,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布明未。 她就那樣靜靜地躺著,像睡著了一般壹蔓。 火紅的嫁衣襯著肌膚如雪趟妥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天庶溶,我揣著相機(jī)與錄音煮纵,去河邊找鬼。 笑死偏螺,一個(gè)胖子當(dāng)著我的面吹牛行疏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播套像,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼酿联,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了夺巩?” 一聲冷哼從身側(cè)響起贞让,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎柳譬,沒想到半個(gè)月后喳张,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡美澳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年销部,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片制跟。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舅桩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出雨膨,到底是詐尸還是另有隱情擂涛,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布聊记,位于F島的核電站撒妈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏甥雕。R本人自食惡果不足惜踩身,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望社露。 院中可真熱鬧挟阻,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坷备,卻和暖如春熄浓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背省撑。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國打工赌蔑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竟秫。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓娃惯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肥败。 傳聞我的和親對(duì)象是個(gè)殘疾皇子趾浅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355