面向對象之設計模式 一、設計模式概述 設計模式(Design Pattern)是前輩們對代碼開發經驗的總結,是解決特定問題的一系列套路。它不是語法規定,而是一套用來提高代碼可復用性、可維護性、穩健性以及安全性的解決方案。 1995年,GoF(Gang of Four,四人組/四人幫)合作出版 ...
目錄
面向對象之設計模式
一、設計模式概述
設計模式(Design Pattern)是前輩們對代碼開發經驗的總結,是解決特定問題的一系列套路。它不是語法規定,而是一套用來提高代碼可復用性、可維護性、穩健性以及安全性的解決方案。
1995年,GoF(Gang of Four,四人組/四人幫)合作出版了《設計模式:可復用面向對象軟體的基礎》一書,共收錄了23種設計模式,從此樹立了軟體設計模式領域的里程碑,人稱"GoF設計模式"。
二、學習意義
設計模式的本質是面向對象設計原則的實際運用,是對類的封裝性、繼承性和多態性以及類的關聯關係和組合關係的充分理解
正確使用設計模式具有以下優點:
1.可以提高程式員的思維能力、編程能力和設計能力
2..使程式設計更加標準化、代碼編製更加工程化,使軟體開發效率大大提高,從而縮短軟體的開發周期。
3.使設計的代碼可重用性高、可讀性強、可靠性高、靈活型好、可維護性強。
三、設計模式分類
設計模式一共有23種
- 創建型模式(5種):
- 工廠模式、抽象工廠模式、創建者模式、原型模式、單例模式
- 結構型模式(7種):
- 適配器模式、橋模式、組合模式、裝飾模式、外觀模式、亨元模式、代理模式
- 行為型模式(11種):
- 解釋器模式、責任鏈模式、命令模式、迭代器模式、中介責模式、備忘錄模式、觀察者模式、狀態模式、策略模式、訪問者模式、模板方法模式
四、創建型模式之單例模式
1、單例模式的內容
保證一個類只有一個實例,並提供一個訪問它的全局訪問點。
2、使用單例模式的目的
- 當類中有很多非常強大的方法 我們在程式中很多地方都需要使用
- 如果不做單例 會產生很多無用的對象浪費存儲空間
- 我們想著使用單例模式 整個程式就用一個對象
3、單例模式實現方式
方式一:
class A:
# 1、在類中定義全局變數,用來綁定已生成的對象
__instance = None
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
# 2、綁定給類的方法
@classmethod
def singleton(cls):
# 3、當使用類調用該方法時,進行判斷
if not slc.__instance:
# 4、當類未生成對象時,生成一個對象
cls.__instance = cls('kangkang', 18, 'male')、
# 5、當類已生成對象時,將綁定對象的變數返回給調用者
return cls.__instance
res = A.singleton()
res1 = A.singleton()
print(id(res), id(res1))
方式二:
'''基於模塊的單例模式:提前產生一個對象 之後導模塊使用'''
class B:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
obj = B('kangkang', 18, 'male')
方式三:
def outer(cls):
__instance = cls('kangkang', 18, 'male')
def inner(*args, **kwargs):
if args or kwargs:
obj = cls(*args, **kwargs)
return obj
return __instance
return inner
@outer
class C:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
res = C()
res1 = C()
print(id(res), id(res1))