-
Notifications
You must be signed in to change notification settings - Fork 1
/
02_05_Abstract_Factory.html
144 lines (106 loc) · 5.51 KB
/
02_05_Abstract_Factory.html
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>Patron Abstract Factory</title>
<link rel="stylesheet" href="./css/reveal.css" />
<link rel="stylesheet" href="./css/theme/league.css" id="theme" />
<link rel="stylesheet" href="./css/highlight/zenburn.css" />
<link rel="stylesheet" href="./css/print/paper.css" type="text/css" media="print" />
<link rel="stylesheet" href="./_assets/slides/css/filminas.css" />
</head>
<body>
<div class="reveal">
<div class="slides"><section data-markdown><script type="text/template">
# Patrones de diseño
## Abstract Factory
<small>
Created by <br/>
[rmarku]("https://t.me/rmarku") <i class="fab fa-telegram"></i>
</small>
</script></section><section data-markdown><script type="text/template">
### Abstract Factory
Este patron **Creacional** que permite crear una familia de objetos relacionados sin especificar la clase concreta.
</script></section><section data-markdown><script type="text/template">
### Abstract Factory
#### Motivación
Algunas veces un sistema debe tener grupos o conjuntos de objetos que están relacionados entre ellos y el cliente
no debe conocer las clases concretas que debería instanciar.
</script></section><section data-markdown><script type="text/template">
#### Aplicabilidad:
Se debe usar Abstract Factory cuando:
* Un sistema debe ser independiente de la forma en que sus productos son creados, compuestos o representados.
* Un sistema debe ser configurado con una de muchas familias de objetos disponibles.
* Una familia de productos están diseñados para trabajar en conjunto y se debe asegurar ese trabajo en conjunto.
</script></section><section data-markdown><script type="text/template">
#### Abstract Factory
#### Estructura
![img](http://www.plantuml.com/plantuml/svg/hP51IyD048NlyolcLaMIqlo0qcoX9y5IU_6ufeCD9hjXCZaKxNztYTaLkrrGyJA7UO_lxUoRpt2hXQt1KZtkT-LwZnit7dPFE9i3h7hHB4FROFdS2-jASEE6vHD0_rgRJhDkyRus9AUEqB8SBK3LwBx7TLEJ4G2nBoH7Odm3HEqneoTG9-XeGRohcBJGbkrXgAIykRsoLUFs36vCSTOuWz24MlmZg_W3w_opmpqhHFl58jeKZlahgBf4g0YgHkXdKvXboyj2hadXoMbD0KHrP4ENlSS1qLSdVE1Z8v8NWgD8Ehn5fI0gE698-hGypvTVnQNqq45yypT0aT93PR0YSnZQvWC0)
<!--
-->
</script></section><section data-markdown><script type="text/template">
### Abstract Factory
#### Participantes
* **Abstract Factory**: Declara interfaz para las operaciones que crean productos abstractos (métodos de fabricación)
* **Concrete Factory**: Implementa los métodos de fabricación de productos concretos
* **Abstract Product**: Declara la interfaz utilizada por el cliente para un tipo de producto concreto
</script></section><section data-markdown><script type="text/template">
### Abstract Factory
#### Participantes
* **Concrete Product**: Define un producto creado por el método de fabricación de una fábrica concretaImplementa la interfaz Producto Abstracto
* **Client**: Usa sólo las interfaces declaradas por Fábrica Abstracta y Productos Abstractos
</script></section><section data-markdown><script type="text/template">
#### DEMO
#### Estructura
![img](http://www.plantuml.com/plantuml/svg/hP71RhCm48Jl-nHxo_-h8dc3A90gfqYjKYuzEcGLKB2Dx4KAQddt8Z3KaCgNzkB3xEYROTYiy5MmqGhZv2qznViK3ztpSdh7rGPWPraOhcM9yTco4HdZeNkqQG3ihL2LC4BYiL34JKMe3USQ82ykX2GhRb2IF9En05afhCLzMP1Y0DPNufmCVW2Y6D639yr9aalfxuXFcI71bDJCMltxxsiftJdHzrvi0T11ZiKrvpyXFGjp-mse3N_j09ZtTfhVm4ajX6akUZ634ttUg7N0uPzW56rdq_lwaEufKn0y3XtLLVIvOBaHmoRmsph75EGDCvvSgnx-qwK_B721tklrUZiVBEJnmnyjtvK2XgdBZjIbbkKN)
<!--
![img](http://www.plantuml.com/plantuml/proxy?fmt=svg&src=https://raw.githubusercontent.com/UCC-ArquitecturaSoftwareI/DesignPatternDiagrams/master/Creacionales/abstract_factory_example.txt)
-->
</script></section><section data-markdown><script type="text/template">
# DEMO
</script></section></div>
</div>
<script src="./js/reveal.js"></script>
<script>
function extend() {
var target = {};
for (var i = 0; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (source.hasOwnProperty(key)) {
target[key] = source[key];
}
}
}
return target;
}
// Optional libraries used to extend on reveal.js
var deps = [
{ src: './plugin/markdown/marked.js', condition: function() { return !!document.querySelector('[data-markdown]'); } },
{ src: './plugin/markdown/markdown.js', condition: function() { return !!document.querySelector('[data-markdown]'); } },
{ src: './plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: './plugin/zoom-js/zoom.js', async: true },
{ src: './plugin/notes/notes.js', async: true },
{ src: './plugin/math/math.js', async: true }
];
// default options to init reveal.js
var defaultOptions = {
controls: true,
progress: true,
history: true,
center: true,
transition: 'default', // none/fade/slide/convex/concave/zoom
dependencies: deps
};
// options from URL query string
var queryOptions = Reveal.getQueryHash() || {};
var options = extend(defaultOptions, {"controls":true,"progress":true,"slideNumber":true}, queryOptions);
</script>
<script src="./_assets/slides/js/pruebas.js"></script>
<script src="./_assets/slides/js/init.js"></script>
<script>
Reveal.initialize(options);
</script>
</body>
</html>