Scala 工厂模式

Scala 工厂模式

工厂方法 是用来提供一个单一的接口来实例化多个类中的一个。在工厂模式中,我们的目标是以这样一种方式来创建对象,即不向客户端暴露创建逻辑,并且可以在一个公共接口的帮助下始终引用一个新创建的对象。

让我们试着用一个例子来理解它。

假设我们需要为一个购车应用程序创建一个库。这个库应该提供三种汽车类型的选择。

  1. 标准型
  2. 豪华型
  3. 豪华型

我们遵循面向对象的设计,因此我们决定创建三个不同的类。每个汽车类型都有一个。我们还想提供一些方法来获得预订价格、品牌和可用性。这三个类都将单独实现它们的方法,但我们必须决定用一个简单的方法来创建一个汽车对象。这样,所有的汽车都可以用同样的方法购买。这里是一个我们想预订汽车的例子。第一条语句返回一个标准汽车的实例。第二条语句返回一个豪华汽车,第三条语句给出一个豪华汽车。在这种情况下,我们提供一个单一的方法来创建各种对象。这里的方法Car是一个Cars的工厂。我们可以预订任何我们需要的汽车类型,而且数量不限。这种类型的对象创建使得编程非常容易,代码也很紧凑。人们不必担心不同种类的汽车有不同的类。这就是工厂方法的意义所在。

// 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) 
        }        
    }

输出

200000.0
100

因此,工厂方法在使编程概念更容易方面有很大帮助。通过这种方式,我们可以随时节省代码空间和类的数量,如果声明同一类型的多个对象有一些不同之处。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程