設計模式隨堂筆記(一)

一,設計模式
    這是一套可複用的,被衆人知曉得,經過編目分明的經驗總結
    作用:使用設計模式是爲了可重用代碼,讓代碼更容易理解,保證代碼的可靠性,減少代碼冗餘,使用更少的代碼實現更多的邏輯
    1,四人幫
        1995年 Erich Gamma, Richard Helm, Ralph Johnson ,John Vlissides合作出版了Design Patterns - Elements of Reusable Object-Oriented Software 一書,在此書中共收錄了23個設計模式。這四位作者在軟件開發領域裏也以他們的匿名著稱Gang of Four(四人幫,簡稱GoF),並且是他們在此書中的協作導致了軟件設計模式的突破。有時這個匿名GoF也會用於指代前面提到的那本書,第一次將設計模式提升到理論高度,並將之規範化,本書提出了23種基本設計模式,自此,在可複用面向對象軟件的發展過程中,新的大量的設計模式不斷出現。
    2,23種設計模式
        創建型模式(5):單例模式,抽象工廠模式,建造者模式,工廠模式,原型模式
        結構型模式(7):適配器模式,橋接模式,裝飾模式,組合模式,外觀模式,享元模式,代理模式
        行爲模式(11):模板方法模式,命令模式,迭代器模式,觀察者模式,中介者模式,備忘錄模式,解釋器模式,狀態模式,策略模式,職責鏈模式,訪問者模式
    3,模式類型:
        創建型模式:爲了解決對象在創建時的一系列問題
        結構型設計模式:爲了解決類或者對象之間組合時產生的一系列問題
        行爲型設計模式:爲了解決類或者對象之間交互以及指責分配的一系列問題

    4,設計模式:框架,架構和庫
        1)設計模式:是一套可複用的,被衆人知曉的,經過編目分明的,經驗總結,他主要強調的是一個設計問題的解決方法。
        2)框架:軟件框架,是項目軟件開發過程中提取特定領域軟件的工薪部分形成的體系結構;不同領域的軟件項目有着不同的框架類型。框架不是現成可用的應用系統。而是一個半成品,提供了諸多服務,開發人員進行二次開發,實現具體功能的應用系統。
            設計模式研究的是針對單一問題的設計思路和解決方法,一個模式可應用於不同的框架和被不同的語言所實現;而框架則是一個應用的體系結構,是一種或多種設計模式和代碼的混合體雖然它們有所不同,但卻共同致力於使人們的設計可以被重用,在思想上存在着統一性的特點,因而設計模式的思想可以在框架設計中進行應用。
        3)架構:簡單的說架構就是一個藍圖,是一種設計方案,將客戶的不同需求抽象成爲抽象組件,並能夠描述這些抽象組件之間的通信和調用,偏重於設計。框架比架構更具體,更偏重於技術
        4)工具庫:是類(方法)的集合,這些類之間可能是相互獨立的。可以直接調用它,而不必再寫一個。框架也往往是類(方法)的集合;但框架中的各個類並不是孤立的,而框架中的業務邏輯代碼是將不同的類“連”在一起,在它們之間建立協作關係

二,工廠模式
    1,簡單工廠模式
        定義:用來創建一種類型的產品實例,所以工廠模式創建的對象是單一的
        特點:通過將創建過程寄生在工廠內,可以解決全局變量污染問題,創建的產品對象是單一的,我們可以對工廠進行改進,適應不同的需求
        批量生產:
            1)在外部創建一個批量工廠,在內部調用工廠,問題是需要在工廠中調用另外創建的一個工廠
            2)通過工廠內部進行分支判斷,決定創建單個產品還是批量產品,這種方法主要在該工廠內部調用該工廠,依賴工廠名稱
            3)通過工廠內部進行分支判斷,決定創建單個產品還是批量產品,這種方法主要在該工廠內部調用該工廠,arguments.callee 解決對工廠名稱的依賴
    2,寄生增強工廠
        特點:通過寄生在工廠內部的對象添加額外的方法和屬性,就是在不改變原類的基礎上實現對類的擴展
        1)在工廠內實例化的類,叫做寄生
        2)對實例化對象擴展屬性的方法,叫做增強
        3)將獨享放回,叫做工廠化
    3,安全工廠
        特點:任何時間調用工廠,不管有沒有new關鍵詞,得到的結果都是一樣的
        思路:
            1)判斷this是否是當前對象內的,通過instanceof判斷對象是不是某個類實例化出來的
            2)如果是通過new出來的,直接對this賦值
            3)如果不是new,主動創建對象,並返回該實例
    4,工廠方法
        定義:通過產品類的抽象,使其創建的業務主要負責用於創建多類產品的實例
        特點:創建多類對象,也是對類的封裝
        思路:
            1)聲明參數
            2)循環創建類
            3)對類添加方法
            4)將實例化對象返回
三,原型模式
    定義:
        通過 將對象的原型指向父類的原型實現該對象原型的屬性與方法的共享
        這是一種基於繼承的模式,是一種創建型模式
        主要用於處理複雜類,通過提取公共部分實現對類的優化
四,單例模式
    定義:只能被實例化一次的對象
    1)靜態變量
        定義之後不能被修改的變量叫做靜態變量
        實現:
            js中的變量是可以任意修改的,前提是這個對象要能被獲取,如果我們將這類變量存儲到一個封閉作用域,不被外界訪問到,此時這個變量就不能被獲取,這個封閉作用域可以用閉包實現,閉包返回的對象或者函數執行是在閉包的作用域內部執行的,這樣這類函數就可以訪問到這類變量,我們將這個函數封裝成取值器,也就是對靜態變量的獲取
            注意:
               靜態變量存儲的數據一定是值類型的數據
    2)惰性單例
        推遲複雜類的實例化時間(晚一點在實例化)
        實現:
            通過閉包將我們的single封裝起來,避免外部訪問而被實例化,這樣可保證只被實例化一次閉包返回的函數的作用域在閉包內部,所以可以訪問到single類對其實例化,這樣執行lazySingle纔可以對single類實例化
        特點:
            只能被實例化一次,推遲實例化時間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章