디자인패턴은 소프트웨어 개발에 발생하는 다양한 이슈들을 해결하는데 도움을 주는 일종의 증명된 기술들이다.
이러한 상황에서는 이러한 패턴을 사용하면 좋을 것이라는 일종의 방향성을 제시해준다.
const utils=(function (){
let instance;
function initialize () {
return {
sum : function(a,b) {
return a+b;
}
};
}
return {
getInstance: function () {
if(!instance){
instance=initialize();
}
return instance;
}
};
})();
let sum = utils.getInstance().sum(3,5);//8
const Vehicle= function(){};
const Car = function() {
this.say= function() {
console.log('I am a car');
}
};
const Truck = function(){
this.say=function(){
console.log('I am a truck');
}
};
const Bike = function(){
this.say=function(){
console.log('I am a bike');
}
};
const VehicleFactory = function(){
this.createVehicle=(vehicleType)=>{
let vehicle;
switch(vehicleType){
case 'car':
vehicle = new Car();
break;
case 'truck':
vehicle = new Truck();
break;
case 'bike':
vehicle = new Bike();
break;
default:
vehicle = new Vehicle();
constructor pattern을 사용함으로써 같은 객체의 여러 인스턴스화를 할 수 있다.
let person = {};
let person = new Object();
function Person (name,age) {
this.name=name;
this.age = age;
this.showName = () => console.log(this.name);
}
let person = new Person('Amy",28);
person.showName();
프로토타입패턴은 객체의 새로운 인스턴스를 프로토타입에서 복제를 통해 만든다. 새로운 객체의 생성자를 직접적으로 만든다면 복잡하고, 비효율적일 수 있으니 프로토타입에서는 이를 보완할 수 있다.
function Book(title,price) {
this.title=title;
this.price=price;
this.printTitle = () =>console.log(this.title);
}
function BookPrototype(prototype){
this.prototype=prototype;
this.clone=()=>{
let book = new Book();
book.title = prototype.title;
book.price = prototype.price;
return book;
};
}
let sampleBook = new Book ('JavaScript',15);
let prototype = new BookProtoType(sampleBook);
let book = prototype.clone();
book.printTitle();
자바스크립트에서는 자체 내장 프로토타입 기능이 있기에, 아래의 방법을 통해 효과적으로 이 패턴을 사용할 수 있다.
let book = {
title : 'Javascript',
price:15
}
let anotherBook = Object.assign({},book);
Observer pattern은 이벤트를 구독하는 구독 모델을 제공하며 해당 이벤트가 발생하면 알림을 받게 된다.
function Newsletter(){
this.observers=[];
}
Newsletter.prototype ={
subscribe: function (observer) {
this.observers.push(observer);
},
unsubscribe: function (observer){
this.observers = this.observers.filter(ob => ob !== observer);
},
notify:function(){
this.observers.forEach(observer =>console.log('Hello' + observer.toString()));
}
}
모듈 패턴은 소프트웨어 모듈의 개념을 구현하는데 사용되는 디자인 패턴이다.이 패턴은 코드에 대한 캡슐화를 제공해주기에 더욱 안전한 어플리케이션을 만들 수 있다.
const bookModule=(function() {
//private
let title='Javascript';
let price=15;
//public
return {
printTitle: function() {
console.log(title);
}
}
})();
bookModule.printTitle();