Norfin85

Norfin85

На Пикабу
поставил 158 плюсов и 156 минусов
отредактировал 0 постов
проголосовал за 0 редактирований
Награды:
10 лет на Пикабу
32К рейтинг 18 подписчиков 3 подписки 342 поста 46 в горячем

Задание на Abstract Factory Pattern

Используя Abstract Factory Pattern создать 6 объектов: 3 немецких танка (легкий, средний, тяжелый) и 3 русских танка (легкий, средний, тяжелый). Танки обладают параметрами: количество хелсов, урон, время на выстрел, время на разворот на 90 градусов.

Организовать бой: у каждой стороны 1 тяжелый танк, 3 средних танка и 5 легких танков. Встречи происходят по-одному случайным образом, также случайным образом определяется тип встречи: атака лоб в лоб, боковая атака, атака сзади. Танк может атаковать, только если он повернулся к противнику. Можно организовать какие-то бонусы при атаке сзади/сбоку.

Задание на Abstract Factory Pattern Java, Задача, Программирование, Паттерны

Abstarct Factory Pattern

Тип: порождающий шаблон


Назначение: обеспечивает создание семейств взаимосвязанных или зависящих друг от друга

объектов без указания их конкретных классов.

Является развитием паттерна Factory Method.

Используется в следующих случаях:

- система не должна зависеть от способа создания объектов;

- система работает с одним из нескольких семейств объектов;

- объекты внутри семейства взаимосвязаны.


Программа обращается к классу-конструктору фабрик FactoryProducer, создавая два класса-фабрики CatFactory и DogFactory - наследники с реализацией абстрактного класса AbstractFactory. Классы фабрики создают 3 объекта класса Cat и 3 объекта класса Dog.

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

Создаем классы-интерфейсы Cat и Dog:

Cat.java, Dog.java

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост
Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

Создаем наследников класса Cat с реализацией его функций:

ThinCat.java, NormalCat.java, FatCat.java

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

Создаем наследников класса Dog с реализацией его функций:

ThinDog.java, NormalDog.java, FatDog.java

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

Создаем абстрактный класс AbstractFactory:

AbstractFactory.java

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

Создаем классы-фабрики CatFactory и DogFactory:

CatFactory.java, DogFactory.java

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

Создаем класс-конструктор фабрик FactoryProducer:

FactoryProducer.java

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

Основной класс AbstractFactoryPatternCvsD:

AbstractFactoryPatternCvsD.java

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост
Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

И что выводит программа:

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

С вами был Salem, на 100 лет проклятый быть криворуким программистом...

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост
Показать полностью 12

Создаем мебель с помощью Factory Method

Задание 3:


Используя Factory method создать шаблон проектирования FurnitureFactory, и с его помощью создать объекты Table, Chair и Cabinet.

Создать общую функцию seeOnFurniture, выводящую на экран, какую мебель мы видим.

Создаем мебель с помощью Factory Method Java, Задача, Программирование, Кот

Изучаем паттерны: Cat Factory Method

Изучаем паттерны: Cat Factory Method Java, Программирование, Паттерны, Длиннопост

Цель паттерна:

Создается специфический класс - интерфейс базового абстрактного класса (создатель интерфейса определяет имена методов, списки аргументов и типы возвращаемых значений, но не тела методов). Конкретная реализация класса-наследника определяется тем, какие параметры были переданы при создании.


Это позволяет использовать в коде программы не специфические классы, а манипулировать абстрактными объектами на более высоком уровне.


Используется в следующих случаях:


- класс не имеет информации о том, какой тип объекта он должен создать;

- класс передает ответственность по созданию объектов наследникам;

- необходимо создать объект в зависимости от входящих данных.


Реализация класса:

Создается класс-интерфейс Cat и реализацию его функций в потомках класса Cat. Далее создается класс-фабрика CatFactory.


Класс CatFactoryDemo использует класс-фабрику CatFactory для создания объектов класса Cat. Мы передаем параметр - коэффициент веса кота, для определения того, какой кот будет создан с помощью функции getCatMassFactor().

Изучаем паттерны: Cat Factory Method Java, Программирование, Паттерны, Длиннопост

Шаг первый:


Создаем класс-интерфейс Cat.java

Изучаем паттерны: Cat Factory Method Java, Программирование, Паттерны, Длиннопост

Шаг второй:

Создаем классы, имеющие интерфейс Cat и реализацией метода toJump()


ThinCat.java

Изучаем паттерны: Cat Factory Method Java, Программирование, Паттерны, Длиннопост
Изучаем паттерны: Cat Factory Method Java, Программирование, Паттерны, Длиннопост

NormalCat.java

Изучаем паттерны: Cat Factory Method Java, Программирование, Паттерны, Длиннопост
Изучаем паттерны: Cat Factory Method Java, Программирование, Паттерны, Длиннопост

FatCat.java

Изучаем паттерны: Cat Factory Method Java, Программирование, Паттерны, Длиннопост
Изучаем паттерны: Cat Factory Method Java, Программирование, Паттерны, Длиннопост

Шаг третий:

Создаем класс-фабрику CatFactory для генерирования различных объектов класса Cat на основе переданной в класс-фабрику CatFactory информации.


CatFactory.java

Изучаем паттерны: Cat Factory Method Java, Программирование, Паттерны, Длиннопост

Шаг четвертый:

Создаем класс CatFactoryDemo, который использует класс-фабрику CatFactory для создания объектов класса Cat.


CatFactoryDemo.java

Изучаем паттерны: Cat Factory Method Java, Программирование, Паттерны, Длиннопост

Программа выведет результат:


ThinCat has jumped-up like a bird.

NormalCat has jumped-up.

FatCat can't jump.

Главный минус метода - необходимость создавать наследника Creator для каждого нового типа продукта.

На том и откланяюсь.) уж больно спать хочется)

Изучаем паттерны: Cat Factory Method Java, Программирование, Паттерны, Длиннопост
Показать полностью 12

Разбор задания 2

Использован вариант решения #comment_68039914


Для определения высоты прыжка создаем функцию junpTo в классе Cat:


public double jumpTo() {
if ((length * height * 6.5 / weight) > 2 || (length * height * 6.5 / weight) < 0.5)
return (20 * length * height * 0,5);
return (20 * length * height);
}

Если кот слишком толстый или худой, уменьшаем его высоту прыжка...

Разбор задания 2 Java, Решение, Программирование, Длиннопост

Создаем базовый класс Furniture:


public abstract class Furniture {
private String color;
private String material;
private Double length;
private Double height;
public Furniture(String color, String material, Double length, Double height) {
this.setColor(color);
this.setMaterial(material);
this.setLength(length);
this.setHeight(height);
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getMaterial() {
return material;
}
public void setMaterial(String material) {
this.material = material;
}
public Double getLength() {
return length;
}
public void setLength(Double length) {
this.length = length;
}
public Double getHeight() {
return height;
}
public void setHeight(Double height) {
this.height = height;
}
}

Класс Furniture - абстрактный, на основе которого не могут создаваться объекты. При этом наследники класса могут быть не абстрактными, на их основе объекты создавать, соответственно, можно.

Создаем класс Table на базе класса Furniture:


public class Table extends Furniture {
private int legs;
public Table (int legs, String color, String material, Double length,
Double height) {
super(color, material, length, height);
this.legs = legs;
}
}

Ключевое слово super () являет собой ссылку на базовый класс, которую можно использовать в дочерних классах. В основном используется для вызова методов родительского класса. В нашем случае оно вызывает конструктор:

Furniture(String color, String material, Double length, Double height)
Разбор задания 2 Java, Решение, Программирование, Длиннопост

Модифицируем класс Cat: создаем экземпляр класса Table и проверяем запрыгнул ли кот на него:


Table table = new Table(4, "Brown", "Wood", 2.0, 1.2);
if (cat2.jumpTo < table.getHeight())
System.out.println("Бройлер 747 удачно приземлился");
else
System.out.println("Бройлер 747 потерпел крушение");
Разбор задания 2 Java, Решение, Программирование, Длиннопост
Показать полностью 3

Модифицируем класс Cat, создаем базовый класс Furniture

Задание 2: необходимо создать функцию, определяющую высоту прыжка кота, зависящую от базовых параметров кота (вес, рост, высота). Создать базовый класс Furniture (мебель), обладающий параметрами: высота, цвет, материал, длина. На базе класса Furniture создать класс Table (добавить параметр количество ножек). Реализовать взаимодействие двух объектов: Cat и Table. Вывести получилось ли у кота запрыгнуть на него.

Модифицируем класс Cat, создаем базовый класс Furniture Java, Задача, Программирование, Гифка

Небольшой разбор первого задания

При прочтении просьба не забывать, что я всего лишь кот :3

Небольшой разбор первого задания Java, Задача, Решение, Длиннопост

Объявляем класс:


class Cat {
}

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


private String name, colour;
private double weight, length, height, strength;

Конструктор по умолчанию, присваивающий стандартные значения переменным класса:


public Cat () {
name = "NoName";
colour = "Black";
weight = 6.5;
length = 1.0;
height = 0.4;
strength = 0.5 * weight * length * height;
}

Конструктор, через который мы сможем в программе присвоить свои значения переменным класса:


public Cat (String name, String colour, double weight, double length, double height)
{
this.name = name;
this.colour = colour;
this.weight = weight;
this.length = length;
this.height = height;
strength = 0.5*weight * length * height;
}

Так как имена передаваемых параметров в конструкторе совпадают с переменными класса, используется конструкция this.переменная = переменная.


Вводится функция класса, позволяющая получить имя кота. Это необходимо, так как переменные класса имеют модификатор private и доступа к ним извне нет.


public String getName () {
return name;
}

И проверка класса на работоспособность:


public static void main(String[] args)

{
Cat cat1 = new Cat();
System.out.println(cat1.getName());
Cat cat2 = new Cat("Salem", "Black", 6.5, 1.0, 0.4);
System.out.println(cat2.getName());
}

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


#comment_67980312


Программа выводит следующее:


NoName
Salem

Вручите мне мой приз, пожалуйста.)

Небольшой разбор первого задания Java, Задача, Решение, Длиннопост
Показать полностью 1

Класс Cat

Задание 1: создать класс Cat. Кот имеет свойства имя, вес, цвет, рост, длина и зависящее от веса, роста и длины свойство - сила. Класс Cat должен иметь параметры по умолчанию.

Класс Cat Java, Задача, Программирование, Текст
Показать полностью 1
Отличная работа, все прочитано!