inblog logo
|
goho
    디자인패턴

    [디자인패턴]옵저버 패턴 응용

    gov's avatar
    gov
    Nov 14, 2024
    [디자인패턴]옵저버 패턴 응용
    Contents
    출력
    💡
    옵저버 패턴 흐름을 스레드로 처리하는 방식
    옵저버 패턴은 상태 변화 시 구독자들에게 알림. 스레드는 알림을 비동기적 처리
    비동기적 처리: 작업이 완료되기를 기다리지 않고 다른 작업을 동시에 진행

    응용

    • while 문: 옵저버가 상품 입고와 같은 상태 변화를 실시간 체크
    • 옵저버 패턴 활용해 주체 변화전까지 대기 스레드로 대기해 실제 상태 변화를 비동기적 처리, 상품 입고 시 바로 알림
    package ch08; import ch08.pub.Pub; import ch08.sub.Sub1; import ch08.sub.Sub2; import ch08.sub.SubListener; // OS에 스레드 요청 > run을 때림 > 다하면 스레드 생명주기 종료 public class App { public static void main(String[] args) { // 메인 스레드 // 1. 객체 생성 init -최초 등록 시 모든 필요 객체 등록됨 Pub pub = new Pub(); SubListener sub1 = new Sub1(); SubListener sub2 = new Sub2(); pub.add(sub1); pub.add(sub2); // 2. 마트 상품 입고 스레드 new Thread(()->{ try { Thread.sleep(10000); } catch (InterruptedException e) { throw new RuntimeException(e); } pub.income(); // 상품 들어옴 }).start(); // 3. 마트 스레드 new Thread(()->{ while (true) { // while 옵저버 응용 -연결이 끊기면 안된다 if (pub.value == null) { System.out.println("상품 미입고.."); } else { pub.notifyChange(pub.value + "입고됨"); break; // 입고 시 종료 } try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } }).start(); } }
    package ch08.pub; import ch08.sub.SubListener; import java.util.ArrayList; import java.util.List; public class Pub { public String value = null; public void income() { // 물건 value = "바나나"; } public List<SubListener> subList = new ArrayList<>(); public void add(SubListener sub) { subList.add(sub); } public void notifyChange(String msg) { for(SubListener sub : subList){ sub.update(msg); } } }
    package ch08.sub; public class Sub1 implements SubListener { @Override public void update(String msg) { System.out.println("Sub1이 받은 알림: " + msg); } } package ch08.sub; public class Sub2 implements SubListener { @Override public void update(String msg) { System.out.println("Sub2가 받은 알림: " + msg); } } package ch08.sub; public interface SubListener { void update(String msg); }

    출력

    notion image
     
    Share article

    goho

    RSS·Powered by Inblog