jueves, 29 de diciembre de 2011

construir un Mojito




Voy a tratar un problema que ocurre por estas fechas navideñas cuando un menor de edad te pide que le prepares un Mojito o cualquier tipo de bebida alcohólica.

Por si no lo habéis notado el ejemplo que os voy a mostrar es como preparar un Mojito en condiciones :)






public class Mojito {
        private final int mRon; //centilitros
        private final int mAzucar; //cucharadas
        private final int mLima; // un trozo es lo recomendable
        private final int mMenta; // 2 hojas está bien
        private final int mRefresco; // decilitros

       public Mojito(int ron, int azucar, int lima, int menta, int refresco){
               mRon = ron;
                mAzucar = azucar;
                mLima = lima;
                mMenta = menta;
                 mRefresco =  refresco ;
        }

/* Como es normal  la cantidad de lima y de menta siempre va ser la misma. Por eso para hacerlo mas cómodo y rápido usamos el siguiente constructor y que cada uno se eche la cantidad de ron, azucar y gaseosa que prefiera */

        public Mojito(int ron, int azucar, int gaseosa){
                this(ron, azucar, 1, 2, gaseosa);
        }

/* El problema ocurre cuando un niño te pide que le prepares una de esas bebidas tan chulas. Así que tenemos que crear otro constructor y usar lo siguiente */

        public Mojito(int azucar, int lima , int gaseosa){
                this(0, azucar, lima, 2, gaseosa);
        }

}

Bien ahora ocurre lo siguiente al crear un mojito pasa lo siguiente

Mojito m = new Mojito(5, 3, 0, 6, 2);

Que cantidad corresponde a que elemento si todos reciben los mismos parametros. Bien esto se soluciona de la siguiente manera.

public class Mojito {
        private final int mRon; // centrilitros
        private final int mAzucar; // cucharadas
        private final int mLima; // un trozo es recomendable
        private final int mMenta; // 2 hojas esta bien
        private final int mRefresco; // decilitros

        private Mojito(Builder builder) {
                mRon = builder.mRon;
                mAzucar = builder.mAzucar;
                mLima = builder.mLima;
                mMenta = builder.mMenta;
                mRefresco = builder.mRefresco;
        }

        public static class Builder {
                private int mRon; // centilitros
                private int mAzucar; // cucharadas
                private int mLima; // un trozo es recomendable
                private int mMenta; // 2 hojas esta bien
                private int mRefresco; // decilitros

                public Builder() {
                }

                public Builder setRon(int ron) {
                        mRon = ron;
                return this;}

                public Builder setAzucar(int azucar) {
                        mAzucar = azucar;
                return this;}

                public Builder setLima(int lima) {
                        mLima = lima;
                return this;}

                public Builder setMenta(int menta) {
                        mMenta = menta;
                return this;}

                public Builder seRefresco(int refresco) {
                        mRefresco = refresco;
                return this;}

                public Mojito build() {
                return new Mojito(this);}
        }
}

De esta forma el crear un mojito será un poco largo pero facil de entender.
Mojito m = new Mojito.Builder().setRon(5)
                                                     .setAzucar(3)
                                                     .setLima(3)
                                                     .setMenta(5)
                                                      .setRefresco(2).build();
El paso anterior no se debe omitir ya que es el que inicializa la cantidad de cada elemento, para ahorrarnos podemos indicar en la Class inicial que cantidad tiene cada elemento.

Bien, explicado esto la creación de los Mojitos es muy sencilla.
        Mojito offical = new Mojito.Builder().build();
        // mojito para niños
        Mojito sinMojito = new Mojito.Builder().setRon(0).build();
        // O ...
        Mojito sinMojito2 = new Mojito.Builder(0).build();

Que disfrutéis de un buen Mojito, hasta la próxima ;) Y Feliz Año Nuevo