FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python-patterns/patterns/structural/facade.py at master · botdigit/python-patterns · GitHub
botdigit
/
python-patterns
Public
forked from
faif/python-patterns
Notifications
You must be signed in to change notification settings
Fork
0
Star
1
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
python-patterns
/
patterns
/
structural
/
facade.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
97 lines (75 loc) · 2.66 KB
Breadcrumbs
python-patterns
/
patterns
/
structural
/
facade.py
Copy path
File metadata and controls
97 lines (75 loc) · 2.66 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Example from https://en.wikipedia.org/wiki/Facade_pattern#Python
*What is this pattern about?
The Facade pattern is a way to provide a simpler unified interface to
a more complex system. It provides an easier way to access functions
of the underlying system by providing a single entry point.
This kind of abstraction is seen in many real life situations. For
example, we can turn on a computer by just pressing a button, but in
fact there are many procedures and operations done when that happens
(e.g., loading programs from disk to memory). In this case, the button
serves as an unified interface to all the underlying procedures to
turn on a computer.
*Where is the pattern used practically?
This pattern can be seen in the Python standard library when we use
the isdir function. Although a user simply uses this function to know
whether a path refers to a directory, the system makes a few
operations and calls other modules (e.g., os.stat) to give the result.
*References:
https://sourcemaking.com/design_patterns/facade
https://fkromer.github.io/python-pattern-references/design/#facade
http://python-3-patterns-idioms-test.readthedocs.io/en/latest/ChangeInterface.html#facade
*TL;DR80
Provides a simpler unified interface to a complex system.
"""
from
__future__
import
print_function
# Complex computer parts
class
CPU
(
object
):
"""
Simple CPU representation.
"""
def
freeze
(
self
):
print
(
"Freezing processor."
)
def
jump
(
self
,
position
):
print
(
"Jumping to:"
,
position
)
def
execute
(
self
):
print
(
"Executing."
)
class
Memory
(
object
):
"""
Simple memory representation.
"""
def
load
(
self
,
position
,
data
):
print
(
"Loading from {0} data: '{1}'."
.
format
(
position
,
data
))
class
SolidStateDrive
(
object
):
"""
Simple solid state drive representation.
"""
def
read
(
self
,
lba
,
size
):
return
"Some data from sector {0} with size {1}"
.
format
(
lba
,
size
)
class
ComputerFacade
(
object
):
"""
Represents a facade for various computer parts.
"""
def
__init__
(
self
):
self
.
cpu
=
CPU
()
self
.
memory
=
Memory
()
self
.
ssd
=
SolidStateDrive
()
def
start
(
self
):
self
.
cpu
.
freeze
()
self
.
memory
.
load
(
"0x00"
,
self
.
ssd
.
read
(
"100"
,
"1024"
))
self
.
cpu
.
jump
(
"0x00"
)
self
.
cpu
.
execute
()
def
main
():
"""
>>> computer_facade = ComputerFacade()
>>> computer_facade.start()
Freezing processor.
Loading from 0x00 data: 'Some data from sector 100 with size 1024'.
Jumping to: 0x00
Executing.
"""
if
__name__
==
"__main__"
:
import
doctest
doctest
.
testmod
(
optionflags
=
doctest
.
ELLIPSIS
)
Back
|
FazBrowse Home
|
New Git URL