Skip to content

Commit 64b4d0f

Browse files
committed
add proxy pattern
1 parent 4312339 commit 64b4d0f

File tree

2 files changed

+256
-0
lines changed

2 files changed

+256
-0
lines changed
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"### Proxy - Forneça um substituto ou espaço reservado para outro objeto para controlar o acesso a ele ou adicionar outras responsabilidades.\n",
8+
"\n",
9+
"### Mais informações:\n",
10+
"- https://sourcemaking.com/design_patterns/proxy\n",
11+
"- https://brizeno.wordpress.com/2011/10/01/mao-na-massa-proxy/"
12+
]
13+
},
14+
{
15+
"cell_type": "code",
16+
"execution_count": 1,
17+
"metadata": {},
18+
"outputs": [],
19+
"source": [
20+
"import abc"
21+
]
22+
},
23+
{
24+
"cell_type": "code",
25+
"execution_count": 2,
26+
"metadata": {},
27+
"outputs": [],
28+
"source": [
29+
"# Subject - Abstract object - Communicate with client\n",
30+
"class Image(metaclass=abc.ABCMeta):\n",
31+
" @abc.abstractmethod\n",
32+
" def display(self):\n",
33+
" pass"
34+
]
35+
},
36+
{
37+
"cell_type": "code",
38+
"execution_count": 3,
39+
"metadata": {},
40+
"outputs": [],
41+
"source": [
42+
"# Real Subject - Concrete object\n",
43+
"class RealImage(Image):\n",
44+
" def __init__(self, filename):\n",
45+
" self._filename = filename\n",
46+
" self.loadFromDisk()\n",
47+
" \n",
48+
" def display(self):\n",
49+
" print('Displaying {}'.format(self._filename))\n",
50+
" \n",
51+
" def loadFromDisk(self):\n",
52+
" print('... Loading {}'.format(self._filename))"
53+
]
54+
},
55+
{
56+
"cell_type": "code",
57+
"execution_count": 4,
58+
"metadata": {},
59+
"outputs": [],
60+
"source": [
61+
"# Proxy\n",
62+
"class ProxyImage(Image):\n",
63+
" def __init__(self, filename):\n",
64+
" self._filename = filename\n",
65+
" self._real_image = None\n",
66+
"\n",
67+
" def display(self):\n",
68+
" if self._real_image == None:\n",
69+
" self._real_image = RealImage(self._filename)\n",
70+
" self._real_image.display()"
71+
]
72+
},
73+
{
74+
"cell_type": "code",
75+
"execution_count": 5,
76+
"metadata": {},
77+
"outputs": [
78+
{
79+
"name": "stdout",
80+
"output_type": "stream",
81+
"text": [
82+
"... Loading image1.png\n",
83+
"Displaying image1.png\n",
84+
"Displaying image1.png\n",
85+
"... Loading image2.png\n",
86+
"Displaying image2.png\n",
87+
"Displaying image2.png\n",
88+
"Displaying image2.png\n"
89+
]
90+
}
91+
],
92+
"source": [
93+
"# Using Proxy Pattern for Image\n",
94+
"# Obs.: Note that it only needs to be loaded once\n",
95+
"\n",
96+
"proxy_image1 = ProxyImage('image1.png')\n",
97+
"proxy_image1.display()\n",
98+
"proxy_image1.display()\n",
99+
"\n",
100+
"proxy_image2 = ProxyImage('image2.png')\n",
101+
"proxy_image2.display()\n",
102+
"proxy_image2.display()\n",
103+
"proxy_image2.display()"
104+
]
105+
}
106+
],
107+
"metadata": {
108+
"kernelspec": {
109+
"display_name": "Python 3",
110+
"language": "python",
111+
"name": "python3"
112+
},
113+
"language_info": {
114+
"codemirror_mode": {
115+
"name": "ipython",
116+
"version": 3
117+
},
118+
"file_extension": ".py",
119+
"mimetype": "text/x-python",
120+
"name": "python",
121+
"nbconvert_exporter": "python",
122+
"pygments_lexer": "ipython3",
123+
"version": "3.5.2"
124+
}
125+
},
126+
"nbformat": 4,
127+
"nbformat_minor": 2
128+
}

Proxy/Proxy.ipynb

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"### Proxy - Forneça um substituto ou espaço reservado para outro objeto para controlar o acesso a ele ou adicionar outras responsabilidades.\n",
8+
"\n",
9+
"### Mais informações:\n",
10+
"- https://sourcemaking.com/design_patterns/proxy\n",
11+
"- https://brizeno.wordpress.com/2011/10/01/mao-na-massa-proxy/"
12+
]
13+
},
14+
{
15+
"cell_type": "code",
16+
"execution_count": 1,
17+
"metadata": {},
18+
"outputs": [],
19+
"source": [
20+
"import abc"
21+
]
22+
},
23+
{
24+
"cell_type": "code",
25+
"execution_count": 2,
26+
"metadata": {},
27+
"outputs": [],
28+
"source": [
29+
"# Subject - Abstract object - Communicate with client\n",
30+
"class Image(metaclass=abc.ABCMeta):\n",
31+
" @abc.abstractmethod\n",
32+
" def display(self):\n",
33+
" pass"
34+
]
35+
},
36+
{
37+
"cell_type": "code",
38+
"execution_count": 3,
39+
"metadata": {},
40+
"outputs": [],
41+
"source": [
42+
"# Real Subject - Concrete object\n",
43+
"class RealImage(Image):\n",
44+
" def __init__(self, filename):\n",
45+
" self._filename = filename\n",
46+
" self.loadFromDisk()\n",
47+
" \n",
48+
" def display(self):\n",
49+
" print('Displaying {}'.format(self._filename))\n",
50+
" \n",
51+
" def loadFromDisk(self):\n",
52+
" print('... Loading {}'.format(self._filename))"
53+
]
54+
},
55+
{
56+
"cell_type": "code",
57+
"execution_count": 4,
58+
"metadata": {},
59+
"outputs": [],
60+
"source": [
61+
"# Proxy\n",
62+
"class ProxyImage(Image):\n",
63+
" def __init__(self, filename):\n",
64+
" self._filename = filename\n",
65+
" self._real_image = None\n",
66+
"\n",
67+
" def display(self):\n",
68+
" if self._real_image == None:\n",
69+
" self._real_image = RealImage(self._filename)\n",
70+
" self._real_image.display()"
71+
]
72+
},
73+
{
74+
"cell_type": "code",
75+
"execution_count": 5,
76+
"metadata": {},
77+
"outputs": [
78+
{
79+
"name": "stdout",
80+
"output_type": "stream",
81+
"text": [
82+
"... Loading image1.png\n",
83+
"Displaying image1.png\n",
84+
"Displaying image1.png\n",
85+
"... Loading image2.png\n",
86+
"Displaying image2.png\n",
87+
"Displaying image2.png\n",
88+
"Displaying image2.png\n"
89+
]
90+
}
91+
],
92+
"source": [
93+
"# Using Proxy Pattern for Image\n",
94+
"# Obs.: Note that it only needs to be loaded once\n",
95+
"\n",
96+
"proxy_image1 = ProxyImage('image1.png')\n",
97+
"proxy_image1.display()\n",
98+
"proxy_image1.display()\n",
99+
"\n",
100+
"proxy_image2 = ProxyImage('image2.png')\n",
101+
"proxy_image2.display()\n",
102+
"proxy_image2.display()\n",
103+
"proxy_image2.display()"
104+
]
105+
}
106+
],
107+
"metadata": {
108+
"kernelspec": {
109+
"display_name": "Python 3",
110+
"language": "python",
111+
"name": "python3"
112+
},
113+
"language_info": {
114+
"codemirror_mode": {
115+
"name": "ipython",
116+
"version": 3
117+
},
118+
"file_extension": ".py",
119+
"mimetype": "text/x-python",
120+
"name": "python",
121+
"nbconvert_exporter": "python",
122+
"pygments_lexer": "ipython3",
123+
"version": "3.5.2"
124+
}
125+
},
126+
"nbformat": 4,
127+
"nbformat_minor": 2
128+
}

0 commit comments

Comments
 (0)