摘要:今天看到的提問關于裝飾模式引發的思考又想起了。其實,模式就是裝飾器模式。這就造成了和裝飾器模式的一個本質不同基于類,還是基于對象。
今天看到 @chengxuyuan_329633 的提問 關于裝飾模式引發的思考 又想起了 mixin。mixin 模式和裝飾器模式很相似。
其實,mixin模式就是裝飾器模式。
那么單利模式呢?呵呵,其實就是全局變量/對象。
當過程式開發變得越來越復雜,代碼越難以維護,于是,出現了軟件危機,解決軟件的危機的方式是什么呢?新的開發模式,也就是 OO,面向對象。
但是面向對象是銀彈嗎?至少最開始的時候是,很多極端的語言說自己是純OO,一切都是對象,看似很完美,但是很多東西根本就不需要用對象的,而且頻繁產生對象也是一件麻煩事,還有些對象整個軟件周期內只要一個就可以了,比如數據庫連接池,或者 sun 對象(畢竟太陽只有一個),但是 OO 的思想迫使他們不能使用全局變量,于是,聰明的 OOer 們開始想辦法,挖空心思的琢磨了幾天幾夜,終于靈光一閃,哇,可以這樣這樣這樣……如此如此如此…… 于是 OOer 們就給他起了一個高端的名字:單利模式。
mixin 也是這種情況,他最開始出現在動態語言,說的具體點,主意是哪些另類 OO 語言,即沒有類的 OO 語言,比如 js。這就造成了 mixin 和裝飾器模式的一個本質不同:基于類,還是基于對象。
mixin 直接修改對象的屬性,將兩個對象 mixin 在一起。而裝飾器模式不是,裝飾器模式所依賴的類是固定的,而且需要很多很多很多,這樣才可以在創建對象是,用不同的類(主意是類,不是對象)來裝飾這個新對象。
附:前幾天翻譯了一篇關于javascript的mixin文章:http://justjavac.com/javascript/2012/12/11/are-your-mixins-ecmascript-5-compatible.html
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/77985.html
摘要:裝飾者模式參與者裝飾者和被裝飾者共同的父類,是一個接口或者抽象類,用來定義基本行為定義具體對象,即被裝飾者抽象裝飾者,繼承自,從外類來擴展。三裝飾器高階組件可以看做是裝飾器模式在的實現。 一 裝飾者模式 優先使用對象組合而不是類繼承。 --《設計模式》 1.什么是裝飾者模式 定義:動態的給對象添加一些額外的屬性或行為。相比于使用繼承,裝飾者模式更加靈活。 2.裝飾者模式參與者 Co...
摘要:的裝飾器中的同樣借鑒了這個語法糖,不過依賴于的方法。等同于也就是說,裝飾器是一個對類進行處理的函數。別名或裝飾器在控制臺顯示一條警告,表示該方法將廢除。有了裝飾器,就可以改寫上面的代碼。 更多文章,請在Github blog查看 在 ES6 中增加了對類對象的相關定義和操作(比如 class 和 extends ),這就使得我們在多個不同類之間共享或者擴展一些方法或者行為的時候,變得并...
摘要:原文博客地址裝飾器模式為對象添加新功能不改變其原有的結構和功能。手機殼就是裝飾器,沒有它手機也能正常使用,原有的功能不變,手機殼可以減輕手機滑落的損耗。 原文博客地址:https://finget.github.io/2018/11/22/decorator/ 裝飾器模式 為對象添加新功能;不改變其原有的結構和功能。 手機殼就是裝飾器,沒有它手機也能正常使用,原有的功能不變,手機殼可以...
摘要:描述符必須是這兩種形式之一不能同時是兩者。可以是任何有效的值數值,對象,函數等。當且僅當該屬性的為時,才能被賦值運算符改變。特點就是不影響之前對象的特性,而新增額外的職責功能。 前言 原文鏈接:[Nealyang/personalBlog]() showImg(https://segmentfault.com/img/remote/1460000018958861); ES6 已經不必...
閱讀 3753·2021-09-22 10:57
閱讀 1923·2019-08-30 15:55
閱讀 2713·2019-08-30 15:44
閱讀 1742·2019-08-30 15:44
閱讀 1885·2019-08-30 15:44
閱讀 2257·2019-08-30 12:49
閱讀 1062·2019-08-29 18:47
閱讀 3144·2019-08-29 16:15