☆ 빌더 패턴 - 복잡한객체를 완성도 있게 만드는 패턴 ★
. 객체생성 자체가복잡한 경우
. 필수 / 선택속성이 나뉘어져있는경우
. 객체가 완성된건지 궁금한경우
class Person {
// constructor(name, age, address) {
// if (!name) {
// throw new Error("name required!!");
// }
// this.name = name;
// this.age = age;
// this.address = address;
// }
constructor(builder) {
this.name = builder.name;
this.age = builder.age;
this.address = builder.address;
}
// setAge(age) {
// this.age = age;
// }
// setAddress(address) {
// this.address = address;
// }
static Builder(name) {
return new PersonBuilder(name);
}
}
/// 생성패턴(1) - 기존방식
// const pp = new Person("jp");
// pp.setAge(32);
// pp.setAddress("123333");
// console.log(pp);
// PersonBuilder 생성자에서는 필수 인 속성만 받는다./
class PersonBuilder {
constructor(name) {
if (!name) {
throw new Error("Name is Null");
}
this.name = name;
}
// 선택적인 부분은 Setter함수를 통해 등록할 수 있도록 따로 두는 것 ..
setAge(age) {
this.age = age;
return this;
}
setAddress(address) {
this.address = address;
return this;
}
build() {
return new Person(this);
}
}
// 생성패턴(2) - 빌더패턴 방식
const a = Person.Builder("ukjae").setAge(36).build();
console.log(a);
☆ 팩토리(공장) 패턴 ★
. 자바스크립트 class문법때문에 요즘에는 잘 쓰이지 않는다.
. 펑션에 특정한 속성을 받아서 특정한 Object와 같은 대상을 만드는 그런 패턴이다. >> 호출할 떄 새로운 Obj생성.
. 일전에 클래스에 private속성이 없었을때는 팩토리 패턴이 자주 사용됨.. (현재는 클래스에 정적static 까지지원된다. )
. 상속이 아니라 함수간의 합성이 하고싶을때는 사용되는 한다.
function factory(name, age, married) {
// 'married' : isMarried라는 함수안에서만 쓰이는 private 변수가 된다.
const isMarried = () => married;
return { name, age, isMarried };
}
const a = factory("zeroCho", 36, "N");
//// 팩토리패턴 대신에 사용되는 클래스..(최근자바스크립트)
class Person {
// static속성
static isAlive;
// private속성
#married;
constructor(name, age, married) {
this.name = name;
this.age = age;
this.#married = married;
}
isMarried() {
return this.#married;
}
}
☆ Single(싱글턴) 패턴 - 딱 한번만 객체를 생성하고 싶을 경우 ★
. 싱글턴 패턴은 앱 전체에서 딱 하나만만들어질 객체들
. 그것들을 싱글턴으로 생성..
. 매번 NEW를 해도 항상 같은객체가 나오게 하고싶다?
. 즉 클래스 인스턴스가 딱 하나이고 싶다.
class Person {
static instance;
#married;
// private속성
constructor(name, age, married) {
// Person.instance가 존재한다면 리턴
if (Person.instance) {
return Person.instance;
}
this.name = name;
this.age = age;
this.#married = married;
Person.instance = this;
}
isMarried() {
return this.#married;
}
}
alert(new Person() == new Person()); //TRUE
☆ 어댑터(Adapter) 패턴 - 형태가 안맞을 시 적절한 패턴. ★
. USB(변환잰더) = 형태 변환 어댑터패턴과 유사
. 형태가 안맞는경우에, 그 안맞는 중간을 맞춰주는 패턴을 어댑터 패턴.
// app이라는 함수 >> 객체(obj)를 받아서 run이라는 함수를 실행.
function app(obj) {
obj.run();
}
class Service {
// run이라는 함수가존재하지 않음.. execute 함수만존재..
execute() {
alert("exectue실행!!!!!");
}
}
class ServiceAdapter {
constructor(obj) {
this.obj = obj;
}
run() {
this.obj.execute();
}
}
// Service클래스에 run함수가 없어서 애러가 발생.. X
// 따라서 Service를 감싸는 ServiceAdapter를 한번더 사용.
//app(new Service());
app(new ServiceAdapter(new Service()));
'Study' 카테고리의 다른 글
[디자인패턴 - javascript] 파트2 (0) | 2024.10.27 |
---|---|
[ javascript && Python ] 알고리즘 챌린지 "Part4" (0) | 2023.03.03 |
[ javascript && Python ] 알고리즘 챌린지 "Part3" (0) | 2023.02.13 |
[ javascript && Python ] 알고리즘 챌린지 "Part2" (0) | 2023.01.29 |
[ javascript && Python ] 알고리즘 챌린지 "Part1" (0) | 2023.01.17 |