JavaScript 디자인 패턴 — 책임 사슬, 싱글톤 및 플라이웨이트 패턴

https://www.amazon.com/John-Au-Yeung/e/B08FT5NT62에서 Amazon에서 내 책을 확인하십시오.

지금 http://jauyeung.net/subscribe/에서 내 이메일 목록을 구독하십시오.

디자인 패턴은 좋은 소프트웨어의 기초입니다. JavaScript 프로그램도 예외는 아닙니다.

이 기사에서 우리는 책임 체인, 싱글톤, 플라이웨이트 패턴을 살펴볼 것입니다.

책임 사슬 패턴



책임 체인은 한 개체에 알림을 보낸 다음 해당 개체가 다른 개체에 알림을 보내는 식이라는 점을 제외하고 관찰자 패턴과 유사합니다.

관찰자 패턴에서 알림은 모든 관찰자에게 동시에 전송됩니다.

예를 들어, 우리가 한 객체에 무언가를 보내고 그 객체가 그것을 집어서 무언가를 하고 그것을 다른 객체에 보내는 식으로 한다면, 그것은 책임 패턴의 체인을 구현합니다.

다음과 같이 구현할 수 있습니다.

const backend = {
  receive(data) {
    // do something with data
  }
}

const middleLayer = {
  notify(data) {
    backend.receive(data);
  }
}

const frontEnd = {
  notify(data) {
    middleLayer.notify(data);
  }
}


위의 코드에는 frontEnd 개체의 notify 메서드를 호출하는 middleLayer 가 있으며, 이 메서드는 backendreceive 메서드를 호출합니다.

이런 식으로 하나의 방법으로 원활하게 데이터를 전달할 수 있습니다.

두 개체 간에 통신을 수행하는 다른 방법을 노출하지 않는 한 frontEndmiddleLayerbackEnd 간에 데이터를 보내는 깨끗한 방법이 있습니다.

하나씩 일어나는 것



싱글톤 패턴은 객체의 하나의 인스턴스만 인스턴스화하는 곳입니다.

JavaScript에서는 객체 리터럴을 생성하여 하나의 인스턴스로 객체를 생성할 수 있습니다.

다음과 같이 작성하여 생성할 수 있습니다.

const obj = {
  foo: 1,
  bar: 'baz'
}


객체 리터럴은 값이 다른 객체일 수도 있는 키-값 쌍의 집합일 뿐입니다.

클래스를 사용하면 다음과 같이 작성할 수도 있습니다.

class Foo {
  constructor() {
    if (!Foo.instance) {
      Foo.instance = {
        foo: 1,
        bar: 2
      }
    }
    return Foo.instance;
  }
}


생성된 인스턴스를 instanceFoo 속성에 할당했습니다.

그런 다음 생성자를 생성할 때 instance 속성을 확인하여 생성된 것이 있는지 확인합니다.

할당된 것이 없으면 개체를 할당합니다.

그런 다음 Foo.instance를 반환하여 인스턴스를 얻습니다.

이제 Foo 의 인스턴스 2개를 생성하면  :

const foo = new Foo();
const bar = new Foo();


그런 다음 다음과 같이 작성하여 동일한 인스턴스인지 확인할 수 있습니다.

console.log(foo === bar);


둘 다 동일한 인스턴스를 참조하므로 true를 얻어야 합니다.

싱글톤은 중앙 위치에 데이터를 저장하기 위해 여러 코드 조각에서 사용하는 개체를 만드는 데 편리합니다.

데이터 액세스 방식에서 충돌을 원하지 않는 경우 충돌 문제가 없는지 확인하기 위해 클래스 또는 객체 리터럴의 싱글톤 인스턴스를 만들 수 있습니다.

플라이웨이트 패턴



플라이웨이트 패턴은 객체 생성을 제한하는 곳입니다.

우리는 각각 더 적은 양의 리소스를 소비하는 작은 개체 집합을 만듭니다.

이 물체는 이러한 물체와 상호 작용하는 데 사용되는 플라이웨이트 물체 뒤에 있습니다.

이러한 개체는 코드와도 상호 작용합니다.

이렇게 하면 더 관리하기 쉬운 작은 개체와 상호 작용하면서 큰 개체의 이점을 얻을 수 있습니다.

예를 들어 다음과 같이 구현할 수 있습니다.

class Student {
 //..
}

const studentIdentity = {
 getIdentity(){
   const student = new Student();
    //..
    return {
    //...
    }
  }
}

const studentScore = {
 getScore(){
   const student = new Student();
    //..
    return {
    //...
    }
  }
}


학생의 데이터를 나타내는 Student 클래스가 있습니다.

그런 다음 studentIdentitystudentScore 개체에서 각각의 ID 또는 점수를 얻는 메서드가 있습니다.

이렇게 하면 모든 메서드를 Student 클래스에 넣을 필요가 없습니다.

대신 특정 종류의 학생 데이터를 처리하는 데 사용할 수 있는 더 작은 방법이 외부에 있습니다.

결론



싱글톤 패턴을 사용하여 일회용 개체를 만들 수 있습니다.

하나의 인스턴스 또는 개체 리터럴을 사용하여 클래스 인스턴스를 만들 수 있습니다.

플라이웨이트 패턴은 큰 물체를 다루기 위해 더 작은 물체를 만들어 복잡성을 줄이는 곳입니다.

Chain of Responsibility 패턴을 사용하면 한 객체에서 다른 객체로 데이터를 직렬 방식으로 보낼 수 있습니다.

좋은 웹페이지 즐겨찾기