-
Notifications
You must be signed in to change notification settings - Fork 142
/
factory_method.py
51 lines (36 loc) · 1.57 KB
/
factory_method.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# coding: utf-8
"""
Фабричный метод (Factory Method) - паттерн, порождающий классы.
Определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанцировать.
Позволяет делегировать инстанцирование подклассам.
Абстрактная фабрика часто реализуется с помощью фабричных методов.
Фабричные методы часто вызываются внутри шаблонных методов.
"""
class Document(object):
def show(self):
raise NotImplementedError()
class ODFDocument(Document):
def show(self):
print 'Open document format'
class MSOfficeDocument(Document):
def show(self):
print 'MS Office document format'
class Application(object):
def create_document(self, type_):
# параметризованный фабричный метод `create_document`
raise NotImplementedError()
class MyApplication(Application):
def create_document(self, type_):
if type_ == 'odf':
return ODFDocument()
elif type_ == 'doc':
return MSOfficeDocument()
else:
return Document()
app = MyApplication()
app.create_document('odf').show() # Open document format
app.create_document('doc').show() # MS Office document format
try:
app.create_document('pdf').show()
except:
print("NotImplementedError")