設計模式就像是能針對特定問題的大招或者組合技,在解決特定問題上能有非常好的效果
所以設計模式都是為了方便開發、後續拓展來使用的
但如果不考慮實際應用,直接就上設計模式的話,會增加不必要的**複雜度,反而影響開發、閱讀和後續維護
下面記錄下來幾種比較常用的設計模式,以供以後需要的時候可以直接拿來用:
工廠模式創造了乙個專門用來生成物件的工廠類,當需要特定物件時,由工廠類來決定具體例項化哪一物件
工廠模式分為3種:
1:簡單工廠模式(單一工廠類生產多種物件)
2:工廠模式(n個工廠生成n個物件)
3:抽象工廠模式
工廠模式介紹和簡單工廠模式實現:
當建立物件變得很複雜,或者建立物件需要涉及多個其它物件並且需要在多個地方建立例項時,需要用到工廠模式來進一步封裝
實現**的解耦,方便後續修改
在建立物件時,將賦予其屬性的方式包裝起來,鏈式的賦予屬性,最後建立物件
// 省略 getter 和 setter 方法
public class computer
} public class newcomputer
private newcomputer(builder builder)
public static final class builder
public builder cpu(string val)
public builder screen(string val)
public builder memory(string val)
public builder mainboard(string val)
public newcomputer build()
} }
public class click
}
能解決當建立物件的引數比較多,而且需要一次建立乙個完整的物件
在這種情況下使用建造者模式能更清晰的看到具體引數
並且能很方便的建立有多個預設引數的完整物件
但當類屬性變多時,會增加**複雜度
就像一件裝備,裝上能增加類或者函式的功能,例如列印log、檢測登入等
下面是我一實際應用,使用python flask
裝飾器**:
def check_user_cookie(re):
"""裝飾器,用cookie來檢查使用者登入"""
def decorator(func):
@functools.wraps(func)
db.session.remove() # 清理flask_sqlalchemy快取,不清理的話,會導致新加入的資料不能查詢出來
if not agree:
return render_template('user/login.html')
return func(*arg, **kw)
return decorator
應用**:
@mod.route('//delete/')
@check_user_cookie(request)
def config_delete(table, item_id):
"""刪除資料"""
delete_item = tables[table].query.filter_by(id=item_id).first()
if delete_item:
try:
db.session.delete(delete_item)
db.session.commit()
flash('刪除成功!')
except exception as e:
flash('刪除失敗,錯誤資訊:%s' % e, category='error')
return redirect(url_for('configtool.config_tool', table=table))
我曾有一次在許可權管理功能上的實際應用,場景如下:
某些函式需要審核符合特定的許可權才可以使用,所以我寫了2個裝飾器,乙個是普通使用者,乙個是管理員
某些函式需要驗證普通使用者許可權,某些需要管理員許可權
我使用裝飾器的話,就可以不在每個函式上面寫 if 語句,
這樣在使用的時候只需要一行**,不但閱讀清晰
而且在需要修改審核許可權邏輯的時候,就不用乙個個改了
單例模式指在呼叫類物件的時候,使用同乙個例項
注意在需要的時候考慮多執行緒的問題(多程序不共享例項)
有一次我乙個需要用到情感分析的專案,每次執行程式的時候
都需要根據語料(可能需要更新)訓練乙個情感模型
這時候我就需要多個執行緒同時使用這個模型,而不是每次使用都再訓練一次,
這時候就需要用到單例模式
軟體設計模式 簡單工廠模式
軟體體系結構與設計模式相關相關知識 客戶端直接通過car類的子類實現相關功能 1 高度耦合 2 條件語句塊需要寫在客戶端內,特別難看 3 客戶程式需要知道服務類的全部的細節才能實現使用工廠模式,將選擇與初始化乙個合適的類,將功能封裝在這個類當中的專門的方法當中 強調 委託的思想,客戶不需要知道服務的...
軟體設計模式
軟體設計模式是軟體設計經驗的總結,是對軟體設計中反覆出現的設計問題的成功解決方案的描述。四元素 名稱 問題 解決方案 效果 1 重用設計,重用設計比重用 更有意義,它會自動帶來 的重用 2 為設計提供公用的詞彙,每個模式名就是乙個設計詞彙,其概念使得程式設計師間交流更方便 3 在開發文件中採用模式詞...
軟體設計模式
建立型設計模式 類模式 物件模式 靜態工廠方法模式 static factory 工廠方法 factory method 抽象工廠 abstract factory 單例模式 singleton 原型模式 prototype 建造模式 builder 介面卡模式 adapter 介面卡模式 adap...