El patrón de fábrica en Scala

El método de fábrica se utiliza para ofrecer una sola interfaz para instanciar una de las múltiples clases. En el patrón Factory , el objetivo es hacer que el objeto no se exponga a la lógica de creación del Cliente y siempre pueda hacer referencia a un objeto recién creado con la ayuda de una interfaz común.

Tratemos de entenderlo con un ejemplo.

Supongamos que necesitamos crear una biblioteca para una aplicación de compra de automóviles. Se supone que la biblioteca ofrece tres opciones de tipos de automóviles.

  1. Estándar
  2. De lujo
  3. Lujo

Estamos siguiendo un diseño orientado a objetos y, por lo tanto, decidimos crear tres clases diferentes. Uno para cada tipo de coche. También queremos proporcionar métodos para obtener el precio de la reserva, las marcas y la disponibilidad. Las tres clases implementarán sus métodos individualmente, pero tenemos que decidirnos por un método simple para crear un objeto Car. Para que todos los autos se puedan comprar usando el mismo método. Aquí tienes un ejemplo de cómo queremos reservar un coche. la primera declaración devuelve una instancia de un automóvil estándar. la segunda declaración devuelve un auto de lujo y la tercera da un auto de lujo. en este caso estamos ofreciendo un solo método para crear una variedad de objetos. el método Car aquí es una fábrica de Cars. podemos reservar el tipo de coche que necesitemos y tantos como queramos. este tipo de creación de objetos hace que la programación sea muy fácil y los códigos compactos. uno no necesita preocuparse por las diferentes clases para diferentes tipos de automóviles. De eso se trata un método de fábrica.

// Scala program of Design factory pattern
  
// creating abstract class for the car
abstract class Car{
          
        // Creating four abstract methods
        def bookingPrice : Double
        def Brands : List[String]
        def availability : Int
        def book(noOfCars:Int)
    }
  
    // Creating an object
    object Car{
        val STANDARD = 0
        val DELUXE = 1
        val LUXURY = 2
  
        // Creating private class
        private class standardCar extends Car{
            private var _availability = 100
            override def bookingPrice = 200000
            override def Brands = List("Maruti", "Tata", "Hyundai")
            override def availability = _availability
            override def book(noOfCars:Int) = {
                _availability = _availability - noOfCars
            }
        }
  
        // Creating private class
        private class DeluxeCar extends Car{
            private var _availability = 50
            override def bookingPrice = 500000
            override def Brands = List("Honda", "Mahindra", "Chevrolet")
            override def availability = _availability
            override def book(noOfCars:Int) = {
                _availability = _availability - noOfCars
            }
        }
  
        // Creating private class
        private class LuxuryCar extends Car{
            private var _availability = 5
            override def bookingPrice = 900000
            override def Brands = List("Audi","BMW", "Mercedes")
            override def availability = _availability
            override def book(noOfCars:Int) = {
                _availability = _availability - noOfCars
            }
        }
          
        // create the apply method
        // single method to create a variety of objects
        def apply(carType:Int):Car = {
            carType match {
                case LUXURY => new LuxuryCar()
                case DELUXE => new DeluxeCar()
                case STANDARD => new standardCar()
                case _ => new standardCar()
            }
        }
         // Main method 
        def main(args: Array[String])  
        { 
            val s = Car(STANDARD)   
            println(s.bookingPrice)
            println(s.availability) 
        }        
    }

Producción:

200000.0
100

Por lo tanto, el método de fábrica ayuda mucho a facilitar los conceptos de programación. De esta forma, siempre podemos guardar el espacio de códigos y el número de clases si declaramos varios objetos del mismo tipo con algunas diferencias.

Publicación traducida automáticamente

Artículo escrito por ShikharMathur1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *