Автор оригинала: Pankaj Kumar.
Я собираюсь представить серию шаблонов дизайна Scala в своих следующих постах. Я возьму каждый учебник по шаблонам проектирования Java, описанный в JournalDEV, и преобразую его в Scala.
Мы также обсудим, какой язык лучше: Java или Scala для их реализации. В этом посте мы обсудим “Шаблон заводского проектирования” реализацию на языке Scala.
Прежде чем прочитать это сообщение, пожалуйста, просмотрите Java-версию “ Шаблон заводского проектирования “ .
ОПУБЛИКУЙТЕ Краткое Содержание
- Шаблон Заводского Дизайна
- Преимущества заводского шаблона проектирования
- Шаблон заводского дизайна в Scala
- Улучшенный шаблон заводского проектирования в Scala
- Шаблон Заводского Проектирования: Java Vs Scala
Шаблон Заводского Дизайна
Шаблон заводского дизайна – один из популярных шаблонов креативного дизайна.
Основная цель шаблона проектирования фабрики состоит в том, чтобы отделить логику создания объектов или экземпляров от клиента. Мы реализуем логику создания объектов в заводском классе, не раскрывая эту логику клиенту.
Шаблон заводского проектирования также известен как шаблон проектирования заводского метода. Он используется, когда у нас есть суперкласс с несколькими подклассами, и на основе входных данных нам нужно вернуть один из подклассов.
Преимущества заводского шаблона проектирования
Заводской шаблон дизайна имеет следующие преимущества:
- Слабая связь между логикой создания объекта и клиентом.
- Четкое разделение обязанностей.
- Легко изменить логику создания объектов, не влияя на клиентскую программу.
Шаблон заводского дизайна в Scala
В этом разделе мы возьмем существующий “Шаблон заводского проектирования” , реализованный на языке Java, и преобразуем его в язык Scala. Мы уточним этот пример в следующем разделе.
В Scala Мы можем реализовать фабричный класс, используя одноэлементный объект и сопоставление шаблонов. Если вы не уверены, что такое одноэлементный объект, как его реализовать в Scala и сопоставлении шаблонов, пожалуйста, ознакомьтесь с моим учебником по Scala.
Сначала разработайте нашу иерархию классов и заводской класс, как показано ниже:
Сначала разработайте нашу иерархию классов и заводской класс, как показано ниже:
package com.journaldev.designpattern.factory
trait Computer{
def getRAM():String
def getHDD():String
def getCPU():String
override def toString = "RAM= " + getRAM +", HDD=" + getHDD + ", CPU=" + getCPU
}
private class PC(val ram:String, val hdd:String, val cpu:String) extends Computer{
def getRAM():String = ram
def getHDD():String = hdd
def getCPU():String = cpu
}
private class Server(val ram:String, val hdd:String, val cpu:String) extends Computer{
def getRAM():String = ram
def getHDD():String = hdd
def getCPU():String = cpu
}
object ComputerFactory{
def apply(compType:String, ram:String, hdd:String, cpu:String) = compType.toUpperCase match {
case "PC" => new PC(ram,hdd,cpu)
case "SERVER" => new Server(ram,hdd,cpu)
}
}
В Scala нет концепции интерфейса. Однако у него есть более мощная концепция, чем интерфейс, то есть: Черта. Мы разработали базовую характеристику со всеми необходимыми функциями или методами.
Здесь объект “Компьютерная фабрика” является одноэлементным объектом. Он используется для предоставления заводского метода для создания наших объектов. Затем разработайте клиент для тестирования этой программы Scala.
Здесь объект “Компьютерная фабрика” является одноэлементным объектом. Он используется для предоставления заводского метода для создания наших объектов. Затем разработайте клиент для тестирования этой программы Scala.
object FactoryMethodDesignPatternClient extends App{
val pc = ComputerFactory("pc","2 GB","500 GB","2.4 GHz");
val server = ComputerFactory("server","16 GB","1 TB","2.9 GHz");
println("Factory PC Config::"+pc);
println("Factory Server Config::"+server);
}
выход
Factory PC Config::RAM= 2 GB, HDD=500 GB, CPU=2.4 GHz Factory Server Config::RAM= 16 GB, HDD=1 TB, CPU=2.9 GHz
Улучшенный шаблон заводского проектирования в Scala
В этом разделе мы улучшим наш предыдущий пример с помощью классов прецедентов Scala. Если вы новичок в тематических классах, пожалуйста, прочитайте мой пост “Углубленные тематические классы Scala” в моем учебнике по Scala.
package com.journaldev.designpattern.factory
trait Computer{
def ram:String
def hdd:String
def cpu:String
override def toString = "RAM= " + ram +", HDD=" + hdd + ", CPU=" + cpu
}
private case class PC(ram:String, hdd:String, cpu:String) extends Computer
private case class Server(ram:String, hdd:String, cpu:String) extends Computer
object ComputerFactory{
def apply(compType:String, ram:String, hdd:String, cpu:String) = compType.toUpperCase match {
case "PC" => PC(ram,hdd,cpu)
case "SERVER" => Server(ram,hdd,cpu)
}
}
Используйте тот же клиент для тестирования этой программы, мы получим тот же результат.
Шаблон Заводского Проектирования: Java Vs Scala
Если мы рассмотрим примеры шаблонов проектирования фабрики Java и Scala, мы увидим, что Scala-лучший язык для реализации этого шаблона проектирования. Причина в том, что:
- Очень лаконичный или менее точный код
- Нет шаблонного кода
- Очень выразительный код
Вот и все о “Шаблоне Заводского Дизайна В Scala”. Мы обсудим еще несколько Шаблонов Проектирования На Языке Scala в моих следующих постах.
Пожалуйста, напишите мне комментарий, если вам нравится мой пост или у вас есть какие-либо вопросы/предложения.