Java
Birleştirme
Tüm uzman konularını birleştirerek çalışan bir uygulama yazarsın.
Proje: birleştirme
Son derste tüm katmanları birleştireceksin. Önce bir bytecode denetçi eklersin: ClassVisitor arabirimi ve InspectorVisitor sınıfı sınıf adını yazdırır. Sonra main içinde kayıt, denetim, reaktif yayın, süre ölçümü ve yerel köprüyü ardışık çalıştırırsın.
Böylece beş katman — açıklama, desen, reaktif, performans, bytecode ve yerel — tek bir akışta birlikte çalışır. Bu, uzman seviyenin sentezidir.
Uygulama ClassVisitor ve InspectorVisitor ekle
Üstteki yapıya interface ClassVisitor ekle; void visitClass(String name); metodu olsun. class InspectorVisitor implements ClassVisitor tanımla; visitClass(String name) metodu System.out.println("inspecting: " + name); yapsın. main içinde new InspectorVisitor().visitClass("HelloService"); çağır.
Örnek çözümü göster
@interface Service {}
@Service
class HelloService {
String greet() { return "hello"; }
}
interface Subscriber {
void onNext(String item);
}
class SimplePublisher {
java.util.List<Subscriber> subs = new java.util.ArrayList<>();
void subscribe(Subscriber s) { subs.add(s); }
void publish(String item) {
for (Subscriber s : subs) s.onNext(item);
}
}
class TimedPublisher {
SimplePublisher delegate;
TimedPublisher(SimplePublisher delegate) {
this.delegate = delegate;
}
void publish(String item) {
long start = System.nanoTime();
delegate.publish(item);
long elapsed = System.nanoTime() - start;
System.out.println("elapsed measured: " + (elapsed >= 0));
}
}
class Registry {
java.util.Map<String, Object> services = new java.util.HashMap<>();
void put(String name, Object instance) { services.put(name, instance); }
Object get(String name) { return services.get(name); }
}
class NativeBridge {
static String describe(String cls, String method, String sig) {
return "Java_" + cls + "_" + method + sig;
}
}
interface ClassVisitor {
void visitClass(String name);
}
class InspectorVisitor implements ClassVisitor {
public void visitClass(String name) {
System.out.println("inspecting: " + name);
}
}
public class Main {
public static void main(String[] args) {
new InspectorVisitor().visitClass("HelloService");
}
}
Uygulama tüm katmanları birleştiren main'i yaz
Üstteki yapıdaki main metodunu değiştir: Registry registry = new Registry(); oluştur, HelloService svc = new HelloService(); ile servisi yapıp registry.put("hello", svc); ile kaydet. new InspectorVisitor().visitClass("HelloService"); çağır. SimplePublisher publisher = new SimplePublisher(); oluştur, publisher.subscribe(s -> System.out.println("got: " + s)); ile abone ol, new TimedPublisher(publisher).publish(svc.greet()); çağır. Son olarak System.out.println(NativeBridge.describe("HelloService", "greet", "()Ljava/lang/String;")); yazdır.
Örnek çözümü göster
@interface Service {}
@Service
class HelloService {
String greet() { return "hello"; }
}
interface Subscriber {
void onNext(String item);
}
class SimplePublisher {
java.util.List<Subscriber> subs = new java.util.ArrayList<>();
void subscribe(Subscriber s) { subs.add(s); }
void publish(String item) {
for (Subscriber s : subs) s.onNext(item);
}
}
class TimedPublisher {
SimplePublisher delegate;
TimedPublisher(SimplePublisher delegate) {
this.delegate = delegate;
}
void publish(String item) {
long start = System.nanoTime();
delegate.publish(item);
long elapsed = System.nanoTime() - start;
System.out.println("elapsed measured: " + (elapsed >= 0));
}
}
class Registry {
java.util.Map<String, Object> services = new java.util.HashMap<>();
void put(String name, Object instance) { services.put(name, instance); }
Object get(String name) { return services.get(name); }
}
class NativeBridge {
static String describe(String cls, String method, String sig) {
return "Java_" + cls + "_" + method + sig;
}
}
interface ClassVisitor {
void visitClass(String name);
}
class InspectorVisitor implements ClassVisitor {
public void visitClass(String name) {
System.out.println("inspecting: " + name);
}
}
public class Main {
public static void main(String[] args) {
Registry registry = new Registry();
HelloService svc = new HelloService();
registry.put("hello", svc);
new InspectorVisitor().visitClass("HelloService");
SimplePublisher publisher = new SimplePublisher();
publisher.subscribe(s -> System.out.println("got: " + s));
new TimedPublisher(publisher).publish(svc.greet());
System.out.println(NativeBridge.describe("HelloService", "greet", "()Ljava/lang/String;"));
}
}
Kendini test et
-
Birleştirme adımı neyi gösterir?
- Tek bir kavramı
- Yalnızca veri tabanını
- Tüm katmanların birlikte çalışmasını
- Yalnızca grafik arayüzü
Cevabı göster
Tüm katmanların birlikte çalışmasını — Birleştirme beş katmanın tek akışta çalışmasını gösterir.
-
denetçi çağrısını tamamla
new InspectorVisitor().visitClass(____);
Cevabı göster
new InspectorVisitor().visitClass("HelloService");
-
birleştirme akışını eşleştir
- Registry.put
- Hizmet kaydı
- InspectorVisitor
- Sınıf denetimi
- TimedPublisher
- Süre ölçümü
- NativeBridge
- Yerel köprü
Sıradaki ders: Uzman bölüm sınavı