Python 設計模式 簡單工廠模式

2021-09-08 09:15:52 字數 3035 閱讀 2274

簡單工廠模式,作為oo ,乙個較為簡單的建立者設計模式。其主要思想,通過介面或繼承建立 不同的子類。

現在乙個dom解析器作為父類,其中xml,soup 分別作為兩個不同解析方式,作為子類。

vechicl 的建立 如下

1

#外部依賴的介面,它遮蔽了我具體使用的第三方庫

2class

***omtree:

3def

__init__

(self,htmlstream):

4 self.htmlstream =htmlstream56

defgetlinklist(self):

7pass89

defgetimagelist(self):

10pass

1112

defelementtostring(self,element):

13pass

1415

defgetattrvalueofelement(self,element,attname):

16pass

具體子類的實現方式 

xml

1

from lxml.html import

tostring

2from lxml.html.soupparser import

fromstring

3class

***omtreewithlxml(***omtree):

4def

__init__

(self,htmlstream):

5 ***omtree.__init__

(self,htmlstream)

6 self._tree =fromstring(self.htmlstream)78

defgetlinklist(self):

9 list =

10for i in

self._tree.iter():

11if i.tag == 'a'

:1213return

list

1415

defgetimagelist(self):

16 list =

17for i in

self._tree.iter():

18if i.tag == '

img':19

20return

list

2122

defelementtostring(self,element):

23return

tostring(element)

2425

defgetattrvalueofelement(self,element,attname):

26if attname in

set(element.keys()):

27return

str(element.attrib[attname])

28else:29

return

""

soap

from beautifulsoup import

beautifulsoup

class

***omtreewithsoup(***omtree):

def__init__

(self,htmlstream):

***omtree.

__init__

(self,htmlstream)

self._tree =beautifulsoup(self.htmlstream)

defgetlinklist(self):

return self._tree.findall('a'

)

defgetimagelist(self):

return self._tree.findall('

img'

)

defelementtostring(self,element):

return

str(element)

defgetattrvalueofelement(self,element,attname):

ifhasattr(element,attname):

return

str(element[attname])

else

:

return

""

creator

1

#工廠模式

2def createdomtree(htmlstream,type='

soup'):

3if type == "

soup":

4return

***omtreewithsoup(htmlstream)56

if type == "

lxml":

7return

***omtreewithlxml(htmlstream)89

return none

簡單的測試 :

if

__name__ == "

__main__":

s1 = '''

beiai

'''print

s1 domtree = createdomtree(s1,'

soup')

list =domtree.getimagelist()

for i in

list:

print domtree.getattrvalueofelement(i,'

src'

)

print domtree.elementtostring(i)

這就是乙個簡單的使用python 實現的 簡單工廠設計模式。

設計模式 工廠模式(簡單工廠模式和方法工廠模式)

一 簡單工廠模式 簡單工廠模式概述 又叫靜態工廠方法模式,它定義乙個具體的工廠類負責建立一些類的例項 優點 客戶端不需要在負責物件的建立,從而明確了各個類的職責 缺點 這個靜態工廠類負責所有物件的建立,如果有新的物件增加,或者某些物件的建立方式不同,就需要不斷的修改工廠類,不利於後期的維護 動物類 ...

設計模式之簡單工廠 工廠方法模式 抽象工廠模式

這裡講三種模式放在一起說明,是因為三種模式關聯性很強 抽象工廠模式簡單化以後就是工廠方法模式,工廠方法模式再簡單化就是簡單工廠模式 簡單工廠模式並沒有被列入到gof的設計模式中 public class factory 簡單工廠類,實現建立產品物件 class factory return prod...

Python下的設計模式學習(1) 簡單工廠模式

使用物件導向的思想設計乙個簡單的計算器類 基於物件導向的四個原則即使得 具有可維護,可復用,可擴充套件,靈活性好的特點 我們需要通過封裝,繼承,多型把程式的耦合度降低。將程式的業務邏輯於介面邏輯分開,讓它們之間的耦合度下降,才可以達到容易維護和擴充套件。比如該問題,使用者只需要知道使用特定的符號,以...