하나의 클래스에 하나의 인스턴스만 가지는 패턴
DB 커넥션풀에 사용됨
여러개의 서브 클래스를 가진 슈퍼 클래스가 있을 때 인풋에 따라 하나의 자식 클래스의 인스턴스를 리턴해주는 방식. 클래스의 인스턴스를 만드는 시점을 서브 클래스로 미룬다.
// 주어지는 인풋에 따라 인스턴스를 리턴해준다.
Coffee coffee = CoffeeFactory.createCoffe(COFFEE.AMERICANO);
비슷한 동작을 하지만, 다르게 구현되어 있는 행위(전략)들을 인터페이스를 구현하는 클래스로 구현하여 전략만 변경하여 유연한 확장을 만드는 패턴.
전략 변경을 통해 동적으로 객체의 동작이 바뀌도록 할 수 있다.
shop.pay(new KAKAO());
shop.pay(new TOSS());
객체의 상태 변화를 관찰하다 변화가 있을 때마다 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 패턴
어떤 객체를 직접적으로 참조하는 것이 아닌, 대리 (proxy) 객체를 통해 대상 객체에 접근하는 방식
Model, View, Controller 로 이루어진 디자인 패턴
Controller가 Presenter로 교체됨
View와 Presenter가 일대일로 결합
Mode, View, ViewModel 로 이루어진 디자인 패턴
ViewModel은 커맨드와 데이터바인딩을 가짐
사용자의 Action은 View를 통해 ViewModel로 전달되고 Model과 데이터를 주고 받은 후 Data Binding을 통해 화면에 뿌린다.
데이터 흐름을 일관성 있게 관리함으로써 대규모 애플리케이션에서 프로그램의 예측 가능성을 높여준다.
기존의 MVC 패턴은 Model의 데이터 변경으로 View 데이터가 변경될 수 있고, View 를 통해 데이터를 입력해 Model을 업데이트 할 수 있다. 즉 양방향 데이터 흐름을 가지게 되고 대규모 애플리케이션에서는 복잡해지게 된다.
사용자가 Action을 발생시키면 이는 Dispatcher에 들어와 Store가 등록해놓은 적절한 콜백 함수가 실행됨. 콜백함수로 데이터 변경이 발생하면 View에게 변경을 알려주고 View에서는 Store 데이터를 가져와 화면에 보여준다.
리엑트에서 쓰이는거 같움!