JavaScript 디자인 패턴 — 책임 사슬, 싱글톤 및 플라이웨이트 패턴
지금 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 패턴을 사용하면 한 객체에서 다른 객체로 데이터를 직렬 방식으로 보낼 수 있습니다.
Reference
이 문제에 관하여(JavaScript 디자인 패턴 — 책임 사슬, 싱글톤 및 플라이웨이트 패턴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aumayeung/javascript-design-patterns-chain-of-responsibility-singleton-and-flyweight-patterns-30m4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)