본문 바로가기

Javascript

Adapter Pattern

반응형
https://dev-momo.tistory.com/entry/Adapter-Pattern-%EC%96%B4%EB%8C%91%ED%84%B0-%ED%8C%A8%ED%84%B4

 

1. 기존의 출력 프린터가 있다고 가정

2. 해쉬태그(#)를 붙여서 출력해야할 일이 생김

3. 어댑터 사용

 

 

 

1. 기존의 출력 메소드가 있다고 가정

 

Printer.js

class Printer {
  constructor() {
    this.textArr = [];
  }

  pushText(text) {
    this.textArr.push(text);
  }

  print() {
    return this.textArr.join(" ");
  }
}

export default Printer;

 

main.js

import Printer from "./Printer.js";

const printer = new Printer();

printer.pushText("Hello");
printer.pushText("Design");
printer.pushText("Pattern");

const result = printer.print();

// Hello Design Pattern
console.log(result);

 

 

2. 해쉬태그(#)를 붙여서 출력해야할 일이 생김

 

HashTagPrinter.js

class HashTagPrinter {
  constructor() {
    this.textArr = [];
  }

  pushText(text) {
    this.textArr.push(text);
  }

  printWithHashTag() {
    return this.textArr.map((text) => `#${text}`).join(" ");
  }
}

export default HashTagPrinter;

 

main.js

import Printer from "./Printer.js";
import HashTagPrinter from "./HashTagPrinter.js";

// const printer = new Printer();
const printer = new HashTagPrinter();

printer.pushText("Hello");
printer.pushText("Design");
printer.pushText("Pattern");

// const result = printer.print();
// printer.print()는 명세가 맞지않아 에러가 발생
// const result = printer.printWithHashTag();으로 변경하는 방법은
// 실제 코드에서는 이 부분만 수정한다는 보장이 없다
// 만약 다시 이전 프린터를 사용한다고 하면 또다시 같은 곳을 수정해줘야한다
const result = printer.printWithHashTag();

// #Hello #Design #Pattern
console.log(result);

 

 

3. 어댑터 사용

 

HashTagAdapter.js

class HashTagAdapter {
  constructor(hashTagPrinter) {
    this.printer = hashTagPrinter;
  }

  pushText(text) {
    this.printer.pushText(text);
  }

  print() {
    return this.printer.printWithHashTag();
  }
}

export default HashTagAdapter;

 

HashTagPrinter.js는 그대로 사용

class HashTagPrinter {
  constructor() {
    this.textArr = [];
  }

  pushText(text) {
    this.textArr.push(text);
  }

  printWithHashTag() {
    return this.textArr.map((text) => `#${text}`).join(" ");
  }
}

export default HashTagPrinter;

 

 

main.js

import HashTagPrinter from "./HashTagPrinter.js";
import HashTagAdapter from "./HashTagAdapter.js";

const printer = new HashTagAdapter(new HashTagPrinter());

printer.pushText("Hello");
printer.pushText("Design");
printer.pushText("Pattern");

const result = printer.print();

// #Hello #Design #Pattern
console.log(result);
반응형