什麼是設計模式

2021-10-02 01:31:35 字數 3547 閱讀 2254

設計模式

設計模式,是一種解決問題的思維,而並非某種特定的方法。是前人給我們總結的寶貴經驗。學習設計模式是為了編寫可復用、可拓展、高效能軟體。設計模式是熟練運用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 是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了可重用 讓 更容易被他人理解 保證 可靠性。毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使 編制真正工程化,設計模式是軟體工程的基石脈絡,如同大廈的結構一樣。通俗的說,...