Escolar Documentos
Profissional Documentos
Cultura Documentos
Espinoza
Patrones contenidos:
Command.
Adapter.
Table
of
Contents
INTRODUCCIN.
...........................................................................................................................................
3
PATRON
DE
DISEO
COMMAND
...................................................................................................................
4
ESTRUCTURA
...............................................................................................................................................................................................................
4
VENTAJAS
......................................................................................................................................................................................................................
4
DESVENTAJAS
.............................................................................................................................................................................................................
4
DIAGRAMA
DE
COMMAND
....................................................................................................................................................................................
4
DIAGRAMA
DEL
EJEMPLO
......................................................................................................................................................................................
5
ADAPTER
......................................................................................................................................................
5
ESTRUCTURA
...............................................................................................................................................................................................................
5
EQUEMA
DE
HERENCIA
MULTIPLE
....................................................................................................................................................................
6
ESQUEMA
DE
COMPOSICIN
.................................................................................................................................................................................
6
DIAGRAMA
DEL
ADAPTER
....................................................................................................................................................................................
6
DESARROLLO.
...............................................................................................................................................
7
BIBLIOGRAFIA:
.............................................................................................................................................
20
OTRAS
FUENTES:
....................................................................................................................................................................................................
20
INTRODUCCIN.
Los patrones de diseo no se implementan con el fin de hacer ms sencilla la estructura de las
aplicaciones, estn destinados a llevar un mayor orden en cuanto a estructura e interaccin entre las
clases. Tenemos varias categoras en las que podemos clasificar los patrones de diseo, una de las
ms comes es:
Creacionales:
Creacionales Se implementan para controlar la creacin de instancias de los objetos.
Patrones Estructurales: Describen cmo las clases y los objetos pueden ser combinados para
formar estructuras mayores.
De comportamiento. Tratan de una forma ms especfica con la relacin y la comunicacin entre
los diferentes objetos.
En este manual se ejemplifica el uso de los patrones de diseo, para esta aplicacin utilizaremos los
patrones COMMAND y ADAPTER .
ESTRUCTURA
El patrn Command se compone por las siguientes clases
COMANDO (COMMAND). Es una interfaz utilizada para enlazar el comando concreto y el objeto
que la recibe.
COMANDO CONCRETO (CONCRETE COMMAND). Contiene la accin especfica. Implementa la
interfaz COMANDO. Es el enlace entre la accin y el objeto que la recibe.
IVOCADOR (INVOKER). Almacena el comando llamado, en un objeto y lo manda llamar para
realizar la accin hacer y deshacer, llamando al objeto que lo almacena.
RECEPTOR (RECEIVER). Es una clase abstracta que contiene mtodos que van a heredar cada
COMANDO CONCRETO, en otras palabras, realiza las operaciones asociadas a cada accin.
CLIENTE (CLIENT). Se encarga de crear el comando concreto y su receptor.
VENTAJAS
DESVENTAJAS
Al igual que muchos patrones, aumenta el numero de clases, haciendo ms complejo el programa.
DIAGRAMA DE COMMAND
ADAPTER
Es un patrn estructural utilizado como un puente entre dos interfaces incompatibles, esto es posible
porque las interfaces usadas desacoplan la clase cliente de la clase de ofrece los servicios.
En este caso ADAPTER nos ayuda a mostrar la lista de acciones en cola creada por el INVOKER,
mediante RecyclerView, del cual los describiremos ms adelante.
ESTRUCTURA
Se puede implementar en un esquema de herencia mltiple o en un esquema de composiscin,
teniendo la misma estructura de clases:
OBJETIVO (TARGET). Es la interfaz que utiliza el cliente.
CLIENTE (CLIENT). Crea nuevos objetos utilizando la interfaz TARJET.
ADAPTADOR (ADAPTER). Se encarga de adaptar la nueva Interfaz ADAPTEE a la interfaz
TARJET utilizada por el Cliente.
ADAPTADO (ADAPTEE). Esta clase defina una interfaz existente que debe ser adaptada a la
interfaz utilizada por el Client, es decir se adapta a la interfaz TARJET.
DESARROLLO.
Defina la interfaz command.
Esta interfaz slo llama al comando especfico, en este caso tenemos cuatro definidos en los
siguientes mtodos: execute() undo() y redo().
Adems agregaremos aqu el mtodo setReceiver(Receiver receiver) para inicializarlo en el
COMANDO CONCRETO.
Quedando de la siguiente manera:
Para mandar llamar a el objeto receive, en este caso llamado ImageReceiver, haremos uso de la
librera PARCELABLE, donde:
PARCELABLE. Es una interfaz predefinida en la librera de Android. Reemplaza el crear un campo
static para guardar un objeto en una clase, y luego tener que recuperarlo en la nueva actividad, es
decir nos ayuda a pasar nuestros objetos de manera rpida entre diferentes actividades o servicios.
Para mas informacin consultar http://androcode.es/2012/12/trabajando-con-parcelables/
Quedando nuestro cdigo de la siguiente manera:
De esta manera al presionar el botn para bajar el contraste nos devolver en la pantalla un Bajar
contraste y en caso contrario un Subir contraste. Al igual que almacena el nuevo objeto valor de
alpha y, haciendo uso del mtodo predefinido CREATOR(), creamos un PARCEL del CONCRETE
COMMAND que utilizaremos ms adelante en el MainActivity.
Y ahora declaramos los mtodos para agregar el nuevo objeto command al historyList
(addCommand()), el mtodo deshacer (undo()) y rehacer(redo()).
Al ejecutarse el mtodo addCommand() se agrega la nueva accin a la lista Undo.
Para el caso de ejecutarse undo(), se elimina el comando de la lista queueUndo, se agrega a la lista
queueRedo y se notifica en pantalla quitando la cadena String de nuestro historyList, que es la lista
que nos aparecer en la parte derecha de nuestra aplicacin. La siguiente imagen muestra cmo se
ven estos tres mtodos. Invoker utiliza estos mtodos para llamar de la lista de objetos las acciones
solicitadas por el Client.
Siguiendo el patrn COMMAND, creamos una interfaz para nuestro INVOKER llamada
InvokerListener.
Para el siguiente elemento, el RECEIVER, lo definiremos como una clase abstracta para seguir el
patrn ADAPTER, el cual utiliza una clase abstracta.
Quedando de la siguiente manera:
Clase ImageReceiver.
Ahora definiremos la interfaz grfica, para la cual utilizaremos el siguiente juego de LinearLayouts y
relativeLayouts siguiendo el siguiente rbol:
LinearLayout: container, ser el espacio donde pondremos todos nuestros elementos.
o RelativeLayout: section_left. Contendr todos los controles, y los siguientes:
ImageView: iv_utng. Contiene los parmetros y el archivo de imagen.
TextView: tv_alpha. Este campo se actualizar cada vez que realicemos una
accin.
Ahora el MainActivity, que ser la clase CLIENT para ambos patrones de diseo.
Para ello usaremos las siguientes libreras:
android.os.Bundle; Lo utilizaremos para instanciar los objetos y poder utilizarlos con
PARCELABLE, mediante el comando @Bind
android.support.v7.app.AppCompatActivity;
android.support.v7.widget.LinearLayoutManager;
android.support.v7.widget.RecyclerView; Utilizaremos esta librera para mostrar nuestro
historyList encargndose de reciclar las vistas de los objetos confirme los vamos llamando.
android.view.View;
android.widget.Button;
android.widget.ImageView;
android.widget.LinearLayout;
android.widget.RelativeLayout;
android.widget.TextView;
java.util.ArrayList;
butterknife.ButterKnife; Lo utilizaremos para hacer inyecciones de nuestros objetos del Layout del
XML, a nuestro MainActivity. Esto nos dar un cdigo ms limpio.
butterknife.Bind;
butterknife.OnClick;
giti7083s.angel.command.command.CambiarContraste; Clase CambiarContraste
giti7083s.angel.command.invoker.Invoker; Clase Invoker
giti7083s.angel.command.invoker.InvokerListener; interfaz InvokerListener.
giti7083s.angel.command.receiver.ImageReceiver; Clase ImageReceiver
Para utilizar RecyclerView y el ButterKnife es necesario agregar las siguientes lneas en nuestro
Gradle: app en la parte de dependencies{ }
Ahora inicializamos todos nuestros objetos que tenemos en nuestro Layout, quedando de la
siguiente manera:
Lo siguiente es declarar un campo estatico de tipo FLOAT que nos diga cunto sube o baja el
contraste de la imagen: ALPHA_STEP .
Tambin declaramos un objeto adapter del tipo HistoryAdapter, un Array con datos del tipo String
llamado textHistory, y por ultimo inicializamos nuestro receiver ImageReceiver y el invoker Invoker.
Por ultimo, definiremos una clase HistoryViewHolder dentro del MainActivity la cual almacena el ID
del textView de nuestro Layout en un @Bind.
Como sugerencia revisa que tengas instalado las siguientes SDK Tools:
BIBLIOGRAFIA:
Gamma, E., Helm, R., Johnson, R., Vlissides, J. Desing Patterns: Elements of Reusable ObjectOriented Software, Addison-Wesley, Reading, MA, 1995.
Grand, M., Patterns in Java: A catalog of reusable design patterns illustrated with UML, John Wiley
and Sons, New York, 1998.
Cooper, J.W. Java Design Patterns: A Tutorial, Addison-Wesley, Reading, MA, 2000.
Brown, W.J., Malveau, R.C., McCormick, H.W., Mowbray, T.J., Antipatterns: Refactoring
Software, Architectures and Projects in Crisis, John Wiley and Sons, New York, 1998.
OTRAS
FUENTES:
https://erikcaffrey.github.io/2015/10/05/recyclerview/
http://androideity.com/2016/01/31/butterknife-inyecciones-de-vistas-en-android/
https://developer.android.com/reference/java/util/Deque.html
http://androcode.es/?s=serializable
https://developer.android.com/reference/android/os/Bundle.html