Telegram Group & Telegram Channel
🧠 Хитрая задача для Java-разработчиков: “Зеркальная фабрика”

📌 Условие:

Реализуйте абстрактную фабрику MirrorFactory, которая:
- При создании объекта класса T возвращает прокси, который повторяет все методы оригинального объекта
- Но дополнительно логирует имя каждого вызванного метода и автоматически вызывает метод с тем же именем у другого объекта (его зеркала)

🎯 Иными словами:


MyService original = new MyService();
MyService mirror = new MyService();

MyService proxy = MirrorFactory.create(original, mirror);
proxy.doWork();
// Лог:
// doWork() called
// original.doWork() вызван
// mirror.doWork() вызван

❗️**Ограничения:**

- Классы могут быть любыми, но должны реализовывать интерфейсы
- Использовать только стандартные средства Java (рефлексия, Proxy, `InvocationHandler`)
- Методы с одинаковым именем и сигнатурой должны быть вызваны у обоих объектов

Решение:

```java
import java.lang.reflect.*;

public class MirrorFactory {
@SuppressWarnings("unchecked")
public static <T> T create(T original, T mirror) {
Class<?> clazz = original.getClass().getInterfaces()[0];
return (T) Proxy.newProxyInstance(
clazz.getClassLoader(),
new Class[]{clazz},
new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(method.getName() + "() called");
Object result1 = method.invoke(original, args);
Object result2 = method.invoke(mirror, args);
return result1; // приоритет оригиналу
}
});
}
}
```

Пример использования:

```java
interface MyService {
void doWork();
}

class MyServiceImpl implements MyService {
public void doWork() {
System.out.println("Working: " + this);
}
}
```

🔍 **Подвох:**

- Java `Proxy` работает **только с интерфейсами**
- Метод вызывается **дважды** — нужно быть осторожным с побочными эффектами
- Возврат значения только одного вызова (`original`) — важно, если метод что-то возвращает

🧠 **Чему учит задача:**

- Глубокому пониманию `java.lang.reflect.Proxy`
- Поведению `InvocationHandler` и сигнатур
- Умению комбинировать дизайн-паттерн **Proxy** и **Decorator**
- Практике метапрограммирования и логирования без изменения кода класса

---

@javatg



tg-me.com/javatg/1829
Create:
Last Update:

🧠 Хитрая задача для Java-разработчиков: “Зеркальная фабрика”

📌 Условие:

Реализуйте абстрактную фабрику MirrorFactory, которая:
- При создании объекта класса T возвращает прокси, который повторяет все методы оригинального объекта
- Но дополнительно логирует имя каждого вызванного метода и автоматически вызывает метод с тем же именем у другого объекта (его зеркала)

🎯 Иными словами:


MyService original = new MyService();
MyService mirror = new MyService();

MyService proxy = MirrorFactory.create(original, mirror);
proxy.doWork();
// Лог:
// doWork() called
// original.doWork() вызван
// mirror.doWork() вызван

❗️**Ограничения:**

- Классы могут быть любыми, но должны реализовывать интерфейсы
- Использовать только стандартные средства Java (рефлексия, Proxy, `InvocationHandler`)
- Методы с одинаковым именем и сигнатурой должны быть вызваны у обоих объектов

Решение:

```java
import java.lang.reflect.*;

public class MirrorFactory {
@SuppressWarnings("unchecked")
public static <T> T create(T original, T mirror) {
Class<?> clazz = original.getClass().getInterfaces()[0];
return (T) Proxy.newProxyInstance(
clazz.getClassLoader(),
new Class[]{clazz},
new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(method.getName() + "() called");
Object result1 = method.invoke(original, args);
Object result2 = method.invoke(mirror, args);
return result1; // приоритет оригиналу
}
});
}
}
```

Пример использования:

```java
interface MyService {
void doWork();
}

class MyServiceImpl implements MyService {
public void doWork() {
System.out.println("Working: " + this);
}
}
```

🔍 **Подвох:**

- Java `Proxy` работает **только с интерфейсами**
- Метод вызывается **дважды** — нужно быть осторожным с побочными эффектами
- Возврат значения только одного вызова (`original`) — важно, если метод что-то возвращает

🧠 **Чему учит задача:**

- Глубокому пониманию `java.lang.reflect.Proxy`
- Поведению `InvocationHandler` и сигнатур
- Умению комбинировать дизайн-паттерн **Proxy** и **Decorator**
- Практике метапрограммирования и логирования без изменения кода класса

---

@javatg

BY Java


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/javatg/1829

View MORE
Open in Telegram


Java Telegram | DID YOU KNOW?

Date: |

Telegram auto-delete message, expiring invites, and more

elegram is updating its messaging app with options for auto-deleting messages, expiring invite links, and new unlimited groups, the company shared in a blog post. Much like Signal, Telegram received a burst of new users in the confusion over WhatsApp’s privacy policy and now the company is adopting features that were already part of its competitors’ apps, features which offer more security and privacy. Auto-deleting messages were already possible in Telegram’s encrypted Secret Chats, but this new update for iOS and Android adds the option to make messages disappear in any kind of chat. Auto-delete can be enabled inside of chats, and set to delete either 24 hours or seven days after messages are sent. Auto-delete won’t remove every message though; if a message was sent before the feature was turned on, it’ll stick around. Telegram’s competitors have had similar features: WhatsApp introduced a feature in 2020 and Signal has had disappearing messages since at least 2016.

China’s stock markets are some of the largest in the world, with total market capitalization reaching RMB 79 trillion (US$12.2 trillion) in 2020. China’s stock markets are seen as a crucial tool for driving economic growth, in particular for financing the country’s rapidly growing high-tech sectors.Although traditionally closed off to overseas investors, China’s financial markets have gradually been loosening restrictions over the past couple of decades. At the same time, reforms have sought to make it easier for Chinese companies to list on onshore stock exchanges, and new programs have been launched in attempts to lure some of China’s most coveted overseas-listed companies back to the country.

Java from br


Telegram Java
FROM USA