什麼是設計模式
設計模式,是一種解決問題的思維,而並非某種特定的方法。是前人給我們總結的寶貴經驗。學習設計模式是為了編寫可復用、可拓展、高效能軟體。設計模式是熟練運用oop後自然而然形成的**習慣。達到最高境後只有一句話:高內聚、低耦合。
一、三種
基礎設計模式
1、工廠模式,工廠方
法或類生成對
象,而不是在代
碼裡直接
new 2、
單例模式,使某個類
的物件只允許被創
建一次 3、注
冊樹模式,全域性共享和交換物件
1.工廠模式
工廠模式是用工廠方法生成物件,而不是直接new乙個物件。
假設我們在imooc命名空間下有乙個名叫db的資料庫操作類,用普通的方法,如果我們想去建立乙個db的物件,我們會直接new乙個出來。
$db = new imooc\\db();
工廠模式就是用乙個工廠方法替換掉直接new乙個物件的操作,以後想建立物件就呼叫這個工廠方法。
<?php
namespace imooc;
class factory
} $db = imooc\\factory::createdb();
工廠模式有什麼好處呢, 我們的專案中多處都對db類進行了new的操作,如果這個類發生了一些更改,比如說類名或者是引數的改變,沒用工廠模式的話我們就需要進行多處更改,而工廠模式只需要改這個工廠類就行了。
2.單例模式
單例模式使某個類的物件僅能建立一次,通常乙個專案中會多次用的db這個資料庫連線類,如果在每個地方都呼叫工廠方法建立乙個資料庫連線類,這樣是比較消耗資源的,我們只需要乙個資料庫連線,單例模式就是來解決這個問題的。
我們開啟db類,首先把構造方法設定為私有的,這樣就禁止了在其他地方直接new我們的db類
<?php
namespace imooc;
class db
static public function getinstance() else
}//下面省略一系列運算元據庫的方法
}db類的構造方法設定為了私有的,那我們在工廠類中也不能直接new了,現在來修改我們的工廠類
<?php
namespace imooc;
class factory
}現在不管我們呼叫多少次工廠方法,我們的資料庫連線都只會被建立一次。
3.注冊樹模式
註冊樹模式可以把我們的物件放在全域性的樹上,讓物件可以全域性共享
下面我們來編寫乙個註冊樹的類,包含set,get,_unset三個操作。
<?php
namespace imooc;
class register
static public function get($name)
static public function _unset($alias)
}下面我們再把工廠方法改一下
<?php
namespace imooc;
class factory
}現在這個工廠方法只需要呼叫一次,以後再需要使用資料庫連線物件,直接從全域性的註冊樹上拿就行了
$db = register::get("db");
至於這個工廠方法是麼時候呼叫,可以在程式初始化的時候,我們的業務邏輯**只需要在註冊樹上把這個物件讀取出來即可。至此,三種最基本的設計模式就介紹完了。
二、介面卡模式 1
、可以將
截然不同的函
數介面封裝成統一的
api 2、
實際應用舉例,
資料庫操作有
mysql,mysqli,pdo
,可以用介面卡模式
統一成一致。類似的
場景還有
cache
介面卡,
將memcache,redis,apc,file
等不同的快取函
數統一成一致
三、策略模式 1
、將一組
特定的行
為和演算法封裝成
類,以適
應特定的上下文環境
2、實際舉
例,假如乙個電
商系統,針對
男女性用
戶展示不同的商品類目
3、可以實現
ioc,依
賴倒置、控制反轉
五、觀察者模式 1
、當乙個
物件狀態發
生改變時,依賴
它的物件全部
會收到通知,並自
動更新 2
、實現了低耦合,非侵入式的通知
與更新機制
七、裝飾器模式 1
、decorator,可以
動態地新增修改
類的功能 2
、乙個類提供了一
項功能,如果要增加或修改
額外的功能,傳統的
程式設計模式,需要寫
乙個子類繼
承它,並
重寫相應
的方法
3、使用裝
飾器模式,僅需在
執行時新增乙個裝
飾器物件即可
實現,可以
實現最大的靈活性
array_reserve
,array_rand
八、迭代器模式 1
、在不需要了解內部
實現的前提下,遍歷一
個聚合物件的
內部元素 2
、相對於傳統
的程式設計模式,可以隱藏遍
歷元素所需要的操作
\iterator
九、**模式 1
、在客戶端與
實體之間建
立乙個**對
象(proxy
),客戶端對實
體操作全部委派給**
物件,隱藏
實體的具體
實現細節 2
、proxy還可以
與業務**
分離,部署到另外的伺服器,
業務**中通
過rpc
來委派任務
十、物件導向
設計的基本原則
1、單一
職責:乙個類
只完成乙個功能
2、開放封閉:乙個
類應該是可
擴充套件的,不可修改的 3
、依賴倒置:乙個類
不應該強依賴
與另乙個類
,每個類對於另外乙個類
都是可替換的
4、配置化:
盡可能使用配置,不要硬編碼
5、面向介面
程式設計:只需要
關心介面,不需要關心
實現
設計模式 什麼是設計模式
在 設計模式之禪 一書中,秦小波前輩寫到 它是一套理論,由軟體界的先輩們總結出的一套可以反覆使用的經驗,它可以提高 的可重用性 增強系統的可維護性,以及解決一系列的複雜問題 也就是說,我們開發人員的前輩曾遭遇過相同的問題,也順利地使用各種方案解決過這些問題,然後他們把這些解決方案總結成了經驗,也就是...
什麼是設計模式
什麼是模式,這是乙個看上去簡單,但是又非常不簡單的問題。我見過很多人,學習模式理論已經很長時間了,但是並不真正理解這一點。模式理論的基本思想其實起源於中國,是中國文化的固有思想。你,我,我們中每乙個自幼受到中國思想薰陶的人,都自然具有這一基本思想。模式的思想存在於中國文化的各個角落,包括哲學 法律,...
什麼是設計模式?
設計模式 design pattern 是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了可重用 讓 更容易被他人理解 保證 可靠性。毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使 編制真正工程化,設計模式是軟體工程的基石脈絡,如同大廈的結構一樣。通俗的說,...