
Лаб_10 Головков И.Е. 12002108 Абстрактная фабрика
.docxБЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»
(НИУ «БелГУ»)
ИНСТИТУТ ИНЖЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ
Кафедра информационных и робототехнических систем
Отчет по лабораторной работе № 10 по дисциплине «Методы и средства проектирования информационных систем и технологий»
Вариант № 3
Тема работы «Абстрактная фабрика»
студента очного отделения
3 курса 12002108 группы
Головкова Игоря Евгеньевича
Проверил:
асс. Пузырев Никита Сергеевич
БЕЛГОРОД, 2024
Вариант №3
В программе нужно создавать различные виды автомобилей, автомобили состоят из двигателя (бензиновый, дизельный) и кузова (седан, универсал). При помощи абстрактной фабрики реализовать создание дизельных универсалов и бензиновых седанов.
Диаграмма классов для программы представлена на рисунке 1.
Рисунок 1 – Диаграмма классов
Результат работы программы, использующей паттерн абстрактная фабрика, представлена на рисунке 2.
Рисунок 2 – Результат работы программы, использующей паттерн абстрактная фабрика
// Класс Main public class Main { public static void main(String[] args) { Auto sedan = new Auto(new SedanCarFactory()); sedan.useCorpus(); sedan.useEngine(); Auto universal = new Auto(new UniversalCarFactory()); universal.useCorpus(); universal.useEngine();} }
// Абстрактный класс Corpus
public abstract class Corpus { public abstract void useCorpus(); }
// Класс DieselEngine
public class DieselEngine extends Engine { @Override public void useEngine() { System.out.println("Используется дизельный двигатель"); } }
// Абстрактный класс Engine
public abstract class Engine { public abstract void useEngine(); }
// Класс PetrolEngine
public class PetrolEngine extends Engine { @Override public void useEngine() { System.out.println("Используется бензиновый двигатель"); } }
// Класс SedanCorpus
public class SedanCorpus extends Corpus { @Override public void useCorpus() { System.out.println("Используется корпус седана"); } }
// Класс UniversalCorpus
public class UniversalCorpus extends Corpus { @Override public void useCorpus() { System.out.println("Используется корпус универсала"); } }
// Класс Auto
public class Auto { private final Corpus corpus; private final Engine engine; public Auto(AutoFactory autoFactory) { this.corpus = autoFactory.createCorpus(); this.engine = autoFactory.createEngine(); } public void useEngine() { engine.useEngine(); } public void useCorpus() { corpus.useCorpus(); } }
// Абстрактный класс AutoFactory
public abstract class AutoFactory { public abstract Corpus createCorpus(); public abstract Engine createEngine(); }
// Класс SedanCarFactory
public class SedanCarFactory extends AutoFactory { @Override public Corpus createCorpus() { return new SedanCorpus(); } @Override public Engine createEngine() { return new PetrolEngine(); } }
// Класс AutoFactory
public class UniversalCarFactory extends AutoFactory { @Override public Corpus createCorpus() { return new UniversalCorpus(); } @Override public Engine createEngine() { return new DieselEngine(); } }