23種設計模式的幾種常見的設計模式

2022-05-17 02:56:31 字數 3012 閱讀 8956

class one(object):

_instants=none #建立乙個標記

from threading import lock #匯入

lock=lock() #例項化鎖

def __new__(cls, *args, **kwargs): #構建函式

if not cls._instants: #判斷,如果沒有構建空間

with cls.lock:

cls._instants=super().__new__(cls) #使用其父類空間

return cls._instants #並修改標記

def __init__(self,name,age):

self.name=name

self.age=age

ret=one('luyi',18)

ret2=one('luer',18)

print(ret.name)

print(ret2.name)

思想:通過判斷標記是否為none 來判斷是否構建了空間,如果沒有構建就使用父類的空間,如果構建了空間,則使用構建的空間(所以使用的一直是父類的空間)

單例模式(singleton pattern)是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。
使用者不需要知道建立什麼樣的類。

當你想要建立乙個可擴充套件的關聯在建立類與支援建立物件的類之間

我們有乙個基類person ,包涵獲取名字,性別的方法 。(如果不實現方法就報錯)

有兩個子類male 和female,可以打招呼。

還有乙個工廠類。

工廠類有乙個方法名getperson有兩個輸入引數,名字和性別。

使用者使用工廠類,通過呼叫getperson方法。

在程式執行期間,使用者傳遞性別給工廠,工廠建立乙個與性別有關的物件。因此工廠類在執行期,決定了哪個物件應該被建立

class person:

def __init__(self):

self.name = none

self.gender = none

def getname(self):

return self.name

def getgender(self):

return self.gender

class male(person):

def __init__(self, name):

print "hello mr." + name

class female(person):

def __init__(self, name):

print "hello miss." + name

class factory:

def getperson(self, name, gender):

if gender == 『m':

return male(name)

if gender == 'f':

return female(name)

if __name__ == '__main__':

factory = factory()

person = factory.getperson("chetan", "m")

當程式執行輸入乙個「型別」的時候,需要建立於此相應的物件。這就用到了工廠模式。在如此情形中,實現**基於工廠模式,可以達到可擴充套件,可維護的**。當增加乙個新的型別,不在需要修改已存在的類,只增加能夠產生新型別的子類。
django  settings 配置檔案中的中介軟體以及所有以字串格式的配置。都是通過匯入importlib模組後通過反射匯入。

這是工廠模式裡的抽象工廠!!!

將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

乙個例子更能很好的理解以上的內容:

1. 有乙個介面類,定義建立物件的方法。乙個指揮員類,接受創造者物件為引數。兩個創造者類,建立物件方法相同,內部建立可自定義

2.乙個指揮員,兩個創造者(瘦子 胖子),指揮員可以指定由哪個創造者來創造

該模式雖名為修飾器,但這並不意味著它應該只用於讓產品看起來更漂亮。修飾器模式通常用於擴充套件乙個物件的功能。
def z_warper(s):

def warper(func):

def inner(*args,**kwargs):

import time

start_time=time.time()

ret=func(*args,**kwargs)

print('執行時間減一秒為:',time.time()-start_time-s,'秒')

return ret

return inner

return warper

@z_warper(1)

def fuc():

print("aaaa")

return 'aaa'

fuc()

通過帶引數的裝飾器,在不改變函式本身的同時。給函式增加乙個執行時間減1的功能

外觀模式又叫做門面模式。在物件導向程式設計中,解耦是一種推崇的理念。但事實上由於某些系統中過於複雜,從而增加了客戶端與子系統之間的耦合度。例如:在家**多**影院時,更希望按下乙個按鈕就能實現影碟機,電視,音響的協同工作,而不是說每個機器都要操作一遍。這種情況下可以採用外觀模式,即引入乙個類對子系統進行包裝,讓客戶端與其進行互動。

外觀模式(facade pattern):外部與乙個子系統的通訊必須通過乙個統一的外觀物件進行,為子系統中的一組介面提供乙個一致的介面,外觀模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。外觀模式又稱為門面模式,它是一種物件結構型模式。

常見的23種設計模式

abstract factory 這個是 抽象工廠模式 用於提供乙個建立一系列相關或相互依賴物件的介面,而無需指定他們具體的類 adapter 介面卡模式,根據字面意思很好理解 將每乙個類的介面轉換成客戶希望的另外乙個介面 使得原本介面不相容而不能一起工作的那些類可以一起工作 bridge 橋梁模式...

軟體設計常見的23種設計模式

在現代軟體開發當中,設計模式起到至關重要的作用。尤其是自從物件導向的語言普遍使用以後,促成了團隊合作設計的熱潮,而在此時,沒有乙個好的設計模式,軟體設計幾乎成了不可能完成的任務。一般模式有4個基本要素 模式名稱 pattern name 問題 problem 解決方案 solution 效果 con...

設計模式 23種設計模式

一 軟體設計模式的概念 軟體設計模式 software design pattern 又稱設計模式,是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。它描述了在軟體設計過程中的一些不斷重 生的問題,以及該問題的解決方案。也就是說,它是解決特定問題的一系列套路,是前輩們的 設計經驗的總結...