Challenge: Flyweight Pattern
In this challenge, you have to implement the flyweight pattern to solve the given problem.
Problem statement #
In this challenge, you have been given the Dress class.
First, you need to define the dressPrice function, which is used to set the price of a dress and return it. The prices of different types of dresses are as follows:
-
maxi:1000 -
gown:2000 -
skirt:500
Every dress has a unique serialNumber, and there cannot be multiple dresses with the same serialNumber. However, in the code given below, there is no such restriction. It allows dresses with the same serialNumber to be created more than once:
class Dress{constructor(serialNumber,type,color,designer,availability){this.serialNumber = serialNumberthis.type = typethis.color = colorthis.designer = designerthis.availability = availabilitythis.price = 0}dressPrice(){//define}}const pinkdress1 = new Dress("#123","skirt","pink","Zara","yes")const pinkdress2 = new Dress("#123","skirt","pink","Zara","yes")console.log(pinkdress1 === pinkdress2)
As you can see, line 17 returns false, meaning two dresses with the same serialNumber exist. You need to implement the flyweight pattern such that the condition
console.log(pinkdress1 === pinkdress2)
evaluates to true. Here is how you can achieve this:
- Implement a
DressFactoryclass which has acreateDressfunction. The function definition should not allow different instances of the sameserialNumberdress to be created.
Input
Two dresses with the same serialNumber created and dressPrice function called on them
Output
Both the instances should be the same, and the price for both should be returned
Sample input
const factory = new DressFactory()
const pinkdress1 = factory.createDress("#123","skirt","pink","Zara","yes")
const pinkdress2 = factory.createDress("#123","skirt","pink","Zara","yes")
console.log(pinkdress1 === pinkdress2)
console.log(pinkdress1.dressPrice())
console.log(pinkdress2.dressPrice())
Sample output
true
500
500
Challenge #
Take a close look and design a step-by-step solution before jumping on to the implementation. This problem is designed for your practice, so try to solve it on your own first. If you get stuck, you can always refer to the solution provided. Good Luck!
class Dress{constructor(serialNumber,type,color,designer,availability){this.serialNumber = serialNumberthis.type = typethis.color = colorthis.designer = designerthis.availability = availabilitythis.price = 0}dressPrice(){//define}}
Let’s discuss the solution in the next lesson.