Skip to content

Commit fd3f8e1

Browse files
author
Tomas Corral
committed
Add Prototype, Builder and add another implementation for Singleton
1 parent 5195219 commit fd3f8e1

35 files changed

+417
-6
lines changed

Builder/.DS_Store

6 KB
Binary file not shown.

Builder/1/.DS_Store

8 KB
Binary file not shown.

Builder/1/index.html

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<html>
2+
<head>
3+
<link type="text/css" rel="stylesheet" href="../../statics/css/style.css"/>
4+
<title>Builder Pattern</title>
5+
</head>
6+
<body>
7+
<div id="source">
8+
<h2>Source</h2>
9+
<pre>
10+
import MealBuilder from './MealBuilder';
11+
12+
var mealBuilder = new MealBuilder();
13+
14+
var veganMeal = mealBuilder.prepareVeganMeal();
15+
veganMeal.showItems();
16+
console.log(`Vegan meal cost: $${veganMeal.getCost()}`);
17+
18+
var nonVeganMeal = mealBuilder.prepareNonVeganMeal();
19+
nonVeganMeal.showItems();
20+
console.log(`Non vegan meal cost: $${nonVeganMeal.getCost()}`);
21+
22+
var deluxeMeal = mealBuilder.prepareDeluxeMeal();
23+
deluxeMeal.showItems();
24+
console.log(`Deluxe meal cost: $${deluxeMeal.getCost()}`);
25+
</pre>
26+
</div>
27+
<div id="console">
28+
<h2>Console</h2>
29+
<ul></ul>
30+
<h1>Builder</h1>
31+
</div>
32+
<script type="text/javascript" src="../../statics/js/utils.js"></script>
33+
<script type="text/javascript" src="dist/scripts/main.js"></script>
34+
</body>
35+
</html>

Builder/1/scripts/Item.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Item {
2+
get name() {
3+
throw new Error('This method should be implemented');
4+
}
5+
get packing() {
6+
throw new Error('This method should be implemented');
7+
}
8+
get price() {
9+
throw new Error('This method should be implemented');
10+
}
11+
}
12+
13+
export default Item;

Builder/1/scripts/Meal.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const itemList = new WeakMap();
2+
class Meal {
3+
get list() {
4+
if(!itemList.get(this)) {
5+
itemList.set(this, []);
6+
}
7+
return itemList.get(this);
8+
}
9+
addItem(item) {
10+
this.list.push(item);
11+
}
12+
getCost() {
13+
return this.list.reduce((accum, item) => {
14+
accum += item.price;
15+
return accum;
16+
}, 0);
17+
}
18+
showItems() {
19+
this.list.forEach((item) => {
20+
console.log(`Item: ${item.name}, Packing: ${item.packing.pack()}, Price: $${item.price}`);
21+
});
22+
}
23+
}
24+
25+
export default Meal;

Builder/1/scripts/MealBuilder.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import Meal from './Meal';
2+
import VeganBurger from './items/burgers/VeganBurger';
3+
import BeefBurger from './items/burgers/BeefBurger';
4+
import KobeBurger from './items/burgers/KobeBurger';
5+
import Water from './items/drinks/Water';
6+
import Coke from './items/drinks/Coke';
7+
import Champagne from './items/drinks/Champagne';
8+
import Salad from './items/side-dishes/Salad';
9+
import Fries from './items/side-dishes/Fries';
10+
import Crudettes from './items/side-dishes/Crudettes';
11+
12+
class MealBuilder {
13+
prepareVeganMeal() {
14+
var meal = new Meal();
15+
meal.addItem(new VeganBurger());
16+
meal.addItem(new Water());
17+
meal.addItem(new Salad());
18+
return meal;
19+
}
20+
prepareNonVeganMeal() {
21+
var meal = new Meal();
22+
meal.addItem(new BeefBurger());
23+
meal.addItem(new Coke());
24+
meal.addItem(new Fries());
25+
return meal;
26+
}
27+
prepareDeluxeMeal() {
28+
var meal = new Meal();
29+
meal.addItem(new KobeBurger());
30+
meal.addItem(new Champagne());
31+
meal.addItem(new Crudettes());
32+
return meal;
33+
}
34+
}
35+
36+
export default MealBuilder;

Builder/1/scripts/Packing.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class Packing {
2+
pack() {
3+
throw new Error('This method should be implemented');
4+
}
5+
}
6+
7+
export default Packing;

Builder/1/scripts/items/Burger.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import Wrapper from '../packing/Wrapper';
2+
import Item from '../Item';
3+
4+
class Burger extends Item {
5+
get packing() {
6+
return new Wrapper();
7+
}
8+
}
9+
10+
export default Burger;

Builder/1/scripts/items/Drink.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import Bottle from '../packing/Bottle';
2+
import Item from '../Item';
3+
4+
class Drink extends Item {
5+
get packing() {
6+
return new Bottle();
7+
}
8+
}
9+
10+
export default Drink;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import BoxUp from '../packing/BoxUp';
2+
import Item from '../Item';
3+
4+
class SideDishes extends Item {
5+
get packing() {
6+
return new BoxUp();
7+
}
8+
}
9+
10+
export default SideDishes;

0 commit comments

Comments
 (0)