Java Developer | Backend
1.69K subscribers
136 photos
1 video
231 links
Авторский канал действующего java разработчика

Платформа: https://offercraft.ru

Сотрудничество @offercraft_support
Download Telegram
Паттерны проектирования. Структурные паттерны. Composite (Компоновщик).

Паттерн проектирования "Компоновщик" (Composite) позволяет объединять объекты в древовидную структуру для представления иерархий "часть-целое". Он помогает клиентам работать с отдельными объектами и группами объектов единообразно.
interface Car {
void draw(String color);
}
class SportCar implements Car {
public void draw(String color) {
System.out.println("SportCar color: " + color);
}
}
class UnknownCar implements Car {
public void draw(String color) {
System.out.println("UnknownCar color: " + color);
}
}
class Drawing implements Car {
private List<Car> cars = new ArrayList<Car>();
public void draw(String color) {
for(Car car : cars) {
car.draw(color);
}
}
public void add(Car s){
this.cars.add(s);
}
}

public class CompositeTest {
public static void main(String[] args) {
Car sportCar = new SportCar();
Car unknownCar = new UnknownCar();
Drawing drawing = new Drawing();
drawing.add(sportCar);
drawing.add(unknownCar);
drawing.draw("green");
}
}

😎 Преимущества паттерна Composite

1⃣ Упрощение кода клиента: Клиентский код может работать с объектами без необходимости знать, являются ли они листьями или компоновщиками.

2⃣Гибкость: Легко добавлять новые виды графических элементов без изменения существующего кода.

3⃣ Иерархическая структура: Позволяет создавать сложные структуры из простых элементов.

Таким образом, паттерн Компоновщик помогает организовать иерархии объектов и упрощает работу с ними в клиентском коде.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61🔥1👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6👏2🔥1
🔤 Структуры данных в Java. Полезные методы вспомогательных классов

Разработчику на Java часто приходится сталкиваться с различными структурами данных. Это могут быть массивы, всевозможные коллекции или реализации Map. Казалось бы, всё с ними ясно и понятно, но существует несколько мелочей, о которые легко споткнуться.

🔗 Ссылка на статью

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥21👏1
Паттерны проектирования. Структурные паттерны. Proxy (Прокси).

Паттерн проектирования "Прокси" (Proxy) предоставляет суррогатный или заместительный объект, который управляет доступом к другому объекту. Этот паттерн используется для контроля доступа к объекту, добавления дополнительной логики перед или после вызова метода реального объекта, а также для ленивой инициализации.
interface Image {
void display();
}
class RealImage implements Image {
private String file;
public RealImage(String file){
this.file = file;
load(file);
}
private void load(String file){
System.out.println("Загрузка " + file);
}
public void display() {
System.out.println("Просмотр " + file);
}
}
class ProxyImage implements Image {
private String file;
private RealImage image;
public ProxyImage(String file){
this.file = file;
}
public void display() {
if(image == null){
image = new RealImage(file);
}
image.display();
}
}

public class ProxyTest {
public static void main(String[] args) {
Image image = new ProxyImage("test.jpg");
image.display();
image.display();
}
}

😎 Преимущества паттерна Proxy

1⃣ Контроль доступа: Позволяет ограничить доступ к реальному объекту.

2⃣Оптимизация ресурсов: Реальный объект создается только при необходимости, что экономит память и время.

3⃣ Дополнительная логика: Можно добавлять дополнительную функциональность (например, логирование, кэширование) без изменения реального объекта.

Таким образом, паттерн Прокси позволяет эффективно управлять доступом к объектам и добавлять дополнительные функции, не изменяя их реализацию.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94🔥1
Вопрос: В чем разница между throw и throws?
Ответ -
Ключевое слово throw используется для явного вызова исключения в программе. Напротив, предложение throws используется для указания тех исключений, которые не обрабатываются методом. Каждый метод должен явно указывать, какие исключения не обрабатываются, чтобы вызывающие этот метод могли защититься от возможных исключений. Наконец, несколько исключений разделяются запятой.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👏3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8🔥5👍2
Вопрос: Какова важность блока finally в обработке исключений?
Ответ -
Блок finally всегда будет выполняться, независимо от того, выброшено ли исключение. Даже в случае, если оператор catch отсутствует и выброшено исключение, блок finally все равно будет выполняться. Последнее, что следует упомянуть, — блок finally используется для освобождения ресурсов, таких как буферы ввода-вывода, соединения с базой данных и т. д.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4👏4
Паттерны проектирования. Структурные паттерны. Flyweight (Легковес).

Паттерн проектирования "Летучий вес" (Flyweight) используется для оптимизации памяти и повышения производительности, особенно когда необходимо создать множество объектов с одинаковыми или схожими свойствами. Этот паттерн позволяет разделять общее состояние объектов и хранить уникальные данные отдельно.
// Интерфейс для летучего веса
public interface MyCharacter {
void display(int position);
}
//Конкретный летучий вес
public class FlyweightCharacter implements MyCharacter {
private final char character;

public FlyweightCharacter(char character) {
this.character = character;
}

@Override
public void display(int position) {
System.out.println("Character: " + character + ", Position: " + position);
}
}
// Фабрика для создания и хранения летучих весов
public class CharacterFactory {
private final Map<Character, FlyweightCharacter> characters = new HashMap<>();

public FlyweightCharacter getCharacter(char character) {
// Если символ уже существует, вернуть его; иначе создать новый
if (!characters.containsKey(character)) {
characters.put(character, new FlyweightCharacter(character));
}
return characters.get(character);
}
}

public class Main {
public static void main(String[] args) {
CharacterFactory factory = new CharacterFactory();

// Создаем строку символов
String text = "HELLO FLYWEIGHT";

for (int i = 0; i < text.length(); i++) {
char currentChar = text.charAt(i);
FlyweightCharacter flyweightChar = factory.getCharacter(currentChar);
flyweightChar.display(i);
}
}
}

😎 Преимущества паттерна Flyweight

1⃣ Экономия памяти: Паттерн позволяет сократить количество создаваемых объектов за счет разделения общего состояния.

2⃣Улучшение производительности: Уменьшение количества объектов может привести к улучшению производительности приложения.

3⃣ Упрощение управления состоянием: Легче управлять общим состоянием между объектами.

Таким образом, паттерн Прокси позволяет эффективно управлять доступом к объектам и добавлять дополнительные функции, не изменяя их реализацию.

😌 Недостатки паттерна Flyweight

1️⃣Сложность кода: Введение дополнительного уровня абстракции может усложнить код.

2️⃣Управление состоянием: Необходимо тщательно управлять состоянием объектов для предотвращения ошибок.

Таким образом, паттерн "Летучий вес" помогает эффективно управлять памятью и производительностью при работе с большим количеством объектов с общими свойствами.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2
🔤 Справочник по Java Collections Framework

Java Collection Framework — иерархия интерфейсов и их реализаций, которая является частью JDK и позволяет разработчику пользоваться большим количесвом структур данных из «коробки».

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

🔗 Ссылка на статью

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2👏21
«Сколько с меня рублей??»

🖥 Java Developer | Backend | #⃣#мемы #java
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9🤩3
Leetcode. Задача 55. Jump Game. (medium)
Вам дан массив целых чисел nums. Изначально вы находитесь на первом индексе массива, и каждый элемент массива представляет вашу максимальную длину прыжка в этой позиции.

Верните true, если вы можете достичь последнего индекса, или false в противном случае.

Пример:
Input: nums = [2,3,1,1,4]
Output: true
Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.


👨‍💻Алгоритм:

1⃣ Начиная с последнего элемента начинаем проверять достижимость каждого элемента

2⃣Если элемент достижим, то меняем значение goal на индекс достижимого элемента

3⃣В конце проверяем условие, что мы пришли к начальной позиции

😎 Решение:
class Solution {
public boolean canJump(int[] nums) {
int goal = nums.length - 1;

for (int i = nums.length - 2; i >= 0; i--) {
if (i + nums[i] >= goal) {
goal = i;
}
}

return goal == 0;
}
}


🖥 Java Developer | Backend | #⃣#задача #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥4🤩2
Вопрос: Что произойдет с объектом Exception после обработки исключения?
Ответ -
Объект Exception будет собран мусором при следующей сборке мусора.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3
🔤 Коллекции в Java: о чём многие забывают

В данной статье автор рассматривает популярные best-practice для применения коллекций.

Из опыта code-review и ответов на StackOverflow набралось немало моментов, касающихся Java Collections API, которые мне казались очевидными, но другие разработчики о них почему-то не знали или знали, но не чувствовали уверенности их применять. В этой статье я собираю в общую кучу всё, что накопилось.


🔗 Ссылка на статью

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥3👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁7🔥5
Паттерны проектирования. Структурные паттерны. Facade (Фасад).

Паттерн проектирования "Фасад" (Facade) предоставляет упрощенный интерфейс к сложной системе классов, библиотек или фреймворков. Он помогает скрыть сложность системы и облегчить взаимодействие с ней, предоставляя клиентам более простой способ использования функциональности.
interface Car {
void start();
void stop();
}
class Key implements Car {
public void start() {
System.out.println("Вставить ключи");
}
public void stop() {
System.out.println("Вытянуть ключи");
}
}
class Engine implements Car {
public void start() {
System.out.println("Запустить двигатель");
}
public void stop() {
System.out.println("Остановить двигатель");
}
}
class Facade {
private Key key;
private Engine engine;
public Facade() {
key = new Key();
engine = new Engine();
}
public void startCar() {
key.start();
engine.start();
}
public void stoptCar() {
key.stop();
engine.stop();
}
}

public class FacadeTest {
public static void main(String[] args) {
Facade facade = new Facade();
facade.startCar();
System.out.println();
facade.stoptCar();
}
}

😎 Преимущества паттерна Facade

1⃣ Упрощение интерфейса: Клиенты взаимодействуют с системой через простой интерфейс.

2⃣Снижение зависимости: Клиенты меньше зависят от сложной структуры системы и могут легко ее менять.

3⃣ Упрощение кода: Упрощает код клиента, так как ему не нужно знать о всех деталях реализации подсистем.

😌 Недостатки паттерна Facade

1⃣Потенциальная потеря гибкости: Если фасад слишком упрощает систему, это может привести к ограничению возможностей использования.

2⃣Дополнительный уровень абстракции: Может добавить дополнительный уровень сложности в архитектуру приложения.

Таким образом, паттерн "Фасад" является полезным инструментом для упрощения работы с комплексными системами и улучшения их удобства для пользователей.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2👏2
Когда единственный на созвоне включил камеру:

🖥 Java Developer | Backend | #⃣#мемы #java
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6🔥5👍1
🔤 Test-Driven Development: как полюбить модульное тестирование

Мы разберём страхи, останавливающие разработчика перед тем, чтобы начать, наконец, писать тесты. Выявим очевидные преимущества. Рассмотрим основные правила разработки через тестирование. И подкрепим всё это реальными примерами.

🔗 Ссылка на статью

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2👏2
Паттерны проектирования. Структурные паттерны. Bridge (Мост).

Паттерн проектирования "Мост" (Bridge) используется для разделения абстракции и реализации, что позволяет изменять их независимо друг от друга. Этот паттерн особенно полезен, когда у вас есть множество возможных реализаций и абстракций, которые могут изменяться независимо, что делает систему более гибкой и расширяемой.
interface Engine {
void setEngine();
}
abstract class Car {
protected Engine engine;
public Car(Engine engine){
this.engine = engine;
}
abstract public void setEngine();
}
class SportCar extends Car {
public SportCar(Engine engine) {
super(engine);
}
public void setEngine() {
System.out.print("SportCar engine: ");
engine.setEngine();
}
}
class UnknownCar extends Car {
public UnknownCar(Engine engine) {
super(engine);
}
public void setEngine() {
System.out.print("UnknownCar engine: ");
engine.setEngine();
}
}
class SportEngine implements Engine {
public void setEngine(){
System.out.println("sport");
}
}
class UnknownEngine implements Engine {
public void setEngine(){
System.out.println("unknown");
}
}
public class BridgeTest {
public static void main(String[] args) {
Car sportCar = new SportCar(new SportEngine());
sportCar.setEngine();
System.out.println();
Car unknownCar = new UnknownCar(new UnknownEngine());
unknownCar.setEngine();
}
}

😎 Преимущества паттерна Bridge

1⃣ Гибкость: Позволяет изменять реализацию и абстракцию независимо друг от друга.

2⃣Упрощение кода: Избегает создания множества подклассов для каждой комбинации абстракции и реализации.

3⃣ Легкость в расширении: Новые реализации и абстракции могут быть добавлены без изменения существующего кода.

😌 Недостатки паттерна Bridge

1⃣Сложность: Увеличивает количество классов в системе.

2⃣Потенциальная путаница: Понимание структуры может быть сложнее из-за разделения на абстракцию и реализацию.

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

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥2
В чем разница между апплетом и приложением Java?
Ответ -
Апплеты выполняются в браузере с поддержкой Java, но приложение Java — это отдельная программа Java, которая может быть выполнена вне браузера. Однако им обоим требуется наличие виртуальной машины Java (JVM). Кроме того, приложению Java требуется метод main с определенной сигнатурой, чтобы начать его выполнение. Апплетам Java такой метод не нужен, чтобы начать их выполнение. Наконец, апплеты Java обычно используют ограничительную политику безопасности, в то время как приложения Java обычно используют более мягкие политики безопасности.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2👏2🤔1
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥4😁3👏2
Какие ограничения накладываются на Java-апплеты?
Ответ -
В основном из-за соображений безопасности на Java-апплеты налагаются следующие ограничения:
*️⃣Апплет не может загружать библиотеки или определять собственные методы.
*️⃣Апплет не может обычно читать или записывать файлы на хосте выполнения.
*️⃣ Апплет не может читать определенные системные свойства.
*️⃣Апплет не может устанавливать сетевые соединения, кроме как с хостом, с которого он пришел.
*️⃣ Апплет не может запускать никакую программу на хосте, который его выполняет.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👏2🔥1