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 가 있으며, 이 메서드는 backend의 receive 메서드를 호출합니다.

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

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

하나씩 일어나는 것



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

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

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

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


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

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

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


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

그런 다음 생성자를 생성할 때 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 클래스가 있습니다.

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

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

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

결론



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

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

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

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

좋은 웹페이지 즐겨찾기