Python設計模式 工廠模式

2021-09-29 01:32:58 字數 4483 閱讀 4541

(一)、工程模式執行場景

若需要將物件的建立和使用解耦,工廠方法也能派上用場。

工廠方法可以在必要時建立新的物件,從而提高效能和記憶體使用率。

(二)、工廠模式案例

import xml.etree.elementtree as etree

import json

class

jsonconnector

:def

__init__

(self, filepath)

: self.data =

dict()

with

open

(filepath, mode=

'r')

as f:

self.data = json.load(f)

@property

defparsed_data

(self)

:return self.data

class

xmlconnector

:def

__init__

(self, filepath)

: self.tree = etree.parse(filepath)

@property

defparsed_data

(self)

:return self.tree

defconnection_factory

(filepath)

:if filepath.endswith(

'json'):

connector = jsonconnector

elif filepath.endswith(

'xml'):

connector = xmlconnector

else

:raise valueerror(

'cannot connect to {}'

.format

(filepath)

)return connector(filepath)

defconnect_to

(filepath)

: factory =

none

try:

factory = connection_factory(filepath)

except valueerror as ve:

print

(ve)

return factory

if __name__ ==

'__main__'

:# 要那個傳哪個,不占用記憶體

sqlite_factory = connect_to(

'person.sq3'

) xml_factory = connect_to(

'person.xml'

) json_factory = connect_to(

'person.json'

)

(一)、什麼是抽象工廠
乙個抽象工廠是(邏輯上的)一組工廠方法,其中的每個工廠方法負責產生不同種類的物件。
(二)、應用場景

(三)、應用案例

class

frog

:# 青蛙類

def__init__

(self, name)

: self.name = name

def__str__

(self)

:return self.name

definteract_with

(self, obstacle)

:print

('{} the frog encounters {} and {}!'

.format

(self,

obstacle, obstacle.action())

)class

bug:

# 蟲子類

def__str__

(self)

:return

'a bug'

defaction

(self)

:return

'eats it'

class

frogworld

:# 青蛙遊戲

def__init__

(self, name)

:print

(self)

self.player_name = name

def__str__

(self)

:return

'\n\n\t------ frog world -------'

defmake_character

(self)

:return frog(self.player_name)

defmake_obstacle

(self)

:return bug(

)class

wizard

:# 男巫類

def__init__

(self, name)

: self.name = name

def__str__

(self)

:return self.name

definteract_with

(self, obstacle)

:print

('{} the wizard battles against {} and {}!'

.format

(self, obstacle, obstacle.action())

)class

ork:

# 獸人

def__str__

(self)

:return

'an evil ork'

defaction

(self)

:return

'kills it'

class

wizardworld

:# 男巫遊戲

def__init__

(self, name)

:print

(self)

self.player_name = name

def__str__

(self)

:return

'\n\n\t------ wizard world -------'

defmake_character

(self)

:return wizard(self.player_name)

defmake_obstacle

(self)

:return ork(

)class

gameenvironment

:def

__init__

(self, factory)

: self.hero = factory.make_character(

) self.obstacle = factory.make_obstacle(

)def

play

(self)

: self.hero.interact_with(self.obstacle)

defvalidate_age

(name)

:try

: age =

raw_input

('welcome {}. how old are you? '

.format

(name)

) age =

int(age)

except valueerror as err:

print

("age {} is invalid, please try again..."

.format

(age)

)return

(false

, age)

return

(true

, age)

defmain()

: name =

raw_input

("hello. what's your name? "

) valid_input =

false

while

not valid_input:

valid_input, age = validate_age(name)

game = frogworld if age <

18else wizardworld

environment = gameenvironment(game(name)

) environment.play(

)if __name__ ==

'__main__'

: main(

)

python設計模式 工廠模式

在學習工廠模式之前,我們必須要了解何為所謂的工廠模式 這篇部落格,我就利用乙個例子來一步步對工廠模式,進行概述 提到工廠模式,我們要有兩個事物,一是工廠,二是產品,具體工廠 產品是什麼型別的?這裡是抽象的,不具體的,需要具體的工廠 產品來繼承或實現其方法,才能稱為具體工廠 具體產品 接下來我定義1個...

python設計模式 工廠模式

在工廠設計模式中,客戶端可以請求乙個物件,而無需知道這個物件來自 即使用哪個類來生成這個物件。工廠背後的思想是簡化物件的建立,物件的建立和使用解耦。工廠模式的兩種形式 一是工廠方法 factory method 對不同的輸入引數返回不同的物件 二是抽象工廠,它是一組用於建立一系列相關事物物件的工廠方...

Python 設計模式 簡單工廠模式

簡單工廠模式,作為oo 乙個較為簡單的建立者設計模式。其主要思想,通過介面或繼承建立 不同的子類。現在乙個dom解析器作為父類,其中xml,soup 分別作為兩個不同解析方式,作為子類。vechicl 的建立 如下 1 外部依賴的介面,它遮蔽了我具體使用的第三方庫 2class omtree 3de...