Рубрики

Фабричный узор в Скале

Метод фабрики используется для предоставления единого интерфейса для создания экземпляров одного из нескольких классов. В шаблоне Factory цель состоит в том, чтобы сделать объект таким образом, чтобы он не подвергался логике создания для клиента и всегда мог ссылаться на вновь созданный объект с помощью общего интерфейса.

Давайте попробуем понять это на примере.

Предположим, что нам нужно создать библиотеку для заявки на покупку автомобиля. Библиотека должна предоставить три варианта автомобилей.

  1. стандарт
  2. роскошный
  3. люкс

Мы следуем за объектно-ориентированным дизайном, и поэтому мы решили создать три разных класса. Один для каждого типа автомобиля. Мы также хотим предоставить методы получения цены бронирования, брендов и доступности. Все три класса будут реализовывать свои методы индивидуально, но мы должны выбрать простой метод для создания объекта Car. Так что все автомобили можно приобрести одним и тем же способом. Вот пример того, как мы хотим заказать автомобиль. первое утверждение возвращает экземпляр стандартного автомобиля. второе утверждение возвращает Deluxe Car, а третье дает Luxury Car. в этом случае мы предлагаем один единственный метод для создания различных объектов. Метод автомобилей здесь — завод автомобилей. мы можем забронировать любой тип автомобиля, который нам нужен, и столько, сколько мы хотим. этот тип создания объектов делает программирование очень простым, а коды — компактными. Не нужно беспокоиться о разных классах для разных типов автомобилей. Вот что такое фабричный метод.

// Scala программа проектирования фабричной выкройки

  
// создаем абстрактный класс для автомобиля

abstract class Car{

          

        // Создание четырех абстрактных методов

        def bookingPrice : Double

        def Brands : List[String]

        def availability : Int

        def book(noOfCars:Int)

    }

  

    // Создание объекта

    object Car{

        val STANDARD = 0

        val DELUXE = 1

        val LUXURY = 2

  

        // Создание частного класса

        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

            }

        }

  

        // Создание частного класса

        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

            }

        }

  

        // Создание частного класса

        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

            }

        }

          

        // создаем метод apply

        // один метод для создания различных объектов

        def apply(carType:Int):Car = {

            carType match {

                case LUXURY => new LuxuryCar()

                case DELUXE => new DeluxeCar()

                case STANDARD => new standardCar()

                case _ => new standardCar()

            }

        }

         // Основной метод

        def main(args: Array[String])  

        

            val s = Car(STANDARD)   

            println(s.bookingPrice)

            println(s.availability) 

        }        

    }

Выход:

200000.0
100

Таким образом, фабричный метод очень помогает в упрощении программирования. Таким образом, мы всегда можем сохранить кодовое пространство и количество классов, если объявляем несколько объектов одного типа с некоторыми отличиями.

Рекомендуемые посты:

Фабричный узор в Скале

0.00 (0%) 0 votes