聲明:本系列文章主要參考《精通Python設(shè)計(jì)模式》一書框产,并且參考一些資料,結(jié)合自己的一些看法來總結(jié)而來。
工廠模式:
??顧名思義锅棕,工廠則是根據(jù)提供的不同的材料,生產(chǎn)出不同的產(chǎn)品淌山。那么在編程的設(shè)計(jì)模式裸燎,根據(jù)提供不同的用戶輸入,調(diào)用相同的接口泼疑,得出不同的結(jié)果德绿。
示例一:
??在編寫一個(gè)web框架時(shí),我們需要考慮到用戶可能會(huì)連接各種各樣的數(shù)據(jù)庫(kù),但是我們不能預(yù)知用戶會(huì)使用哪個(gè)數(shù)據(jù)庫(kù)移稳。于是我們提供一個(gè)通用方法蕴纳,里面包含了各個(gè)數(shù)據(jù)庫(kù)的連接方案,用戶在使用過程中个粱,只需要傳入數(shù)據(jù)庫(kù)的名字并給出連接所需要的信息古毛,即可得到一個(gè)固定的 | 針對(duì)用戶所選數(shù)據(jù)庫(kù)的 | 連接字符串。
代碼:
def connect(db, *arg, **kwargs):
db = db.lower()
dbname = kwargs['db']
if db == 'mysql':
result = "mysql+pymysql://{username}:{password}@{server}/{dbname}".format(username = kwargs['username'], password = kwargs['password'], server = kwargs['server'], dbname=dbname)
elif db == 'postgresql:
result = 'postgresql://{username}:{passwrod}@{server}/{dbname}'.format(susername = kwargs['username'], password = kwargs['password'], server = kwargs['server'], dbname=dbname)
return result
可以看到:
如果用戶的輸入為 'MySQL'都许, 那么工廠方法會(huì)為其返回一個(gè)用于連接 MySQL 數(shù)據(jù)庫(kù)的連接字符串稻薇;(使用pymysql進(jìn)行連接)
如果用戶的輸入為 'postgresql',那么將會(huì)得到一個(gè)用于連接 postgresql數(shù)據(jù)庫(kù)的連接字符串梭稚;更多的則是同樣的原理颖低。(安裝psycopg2進(jìn)行連接)。
為了方便理解弧烤,那么繼續(xù)看下面這個(gè)案例:
??在實(shí)際開發(fā)過程中忱屑,分為生產(chǎn)模式和開發(fā)模式,那么我也可以通過工廠模式暇昂,在不同的模式下通過輸出不同的命令莺戒,調(diào)用相同的接口完成 不同環(huán)境下的配置實(shí)現(xiàn)。
示例二:
# 在config.py模塊下
class Config(object):
# 放置兩種模式下共同的配置
pass
class DevelopConfig(Config):
DEBUG = True
LOG_LEVEL = logging.DEBUG
class ProductConfig(Config):
LOG_LEVEL = logging.ERROR
config = {
"development": DevelopConfig,
"production": ProductConfig
}
# __init__.py模塊下
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
也就是說:
??當(dāng)輸入“development”,則加載開發(fā)環(huán)境的配置文件急波,而輸入“production”从铲,則加載生產(chǎn)環(huán)境下的配置文件。
以上就是工廠模式:
總結(jié):其實(shí)這個(gè)方法非常初級(jí)非常暴力澄暮,就是無(wú)限的羅列需要考慮的情況并給出對(duì)應(yīng)的處理而已名段。
over~~~~~~~