Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Equipment {
- private price: number = 0;
- private name: string = '';
- getPrice() {
- return this.price || 0;
- }
- getName() {
- return this.name;
- }
- setName(name: string) {
- this.name = name;
- }
- setPrice(price: number) {
- this.price = price;
- }
- }
- class Engine extends Equipment {
- constructor() {
- super();
- this.setName('Engine');
- this.setPrice(800);
- }
- }
- class Body extends Equipment {
- constructor() {
- super();
- this.setName('Body');
- this.setPrice(3000);
- }
- }
- class Tools extends Equipment {
- constructor() {
- super();
- this.setName('Tools');
- this.setPrice(4000);
- }
- }
- class Composite extends Equipment {
- private equipments: Equipment[];
- constructor() {
- super();
- this.equipments = [];
- }
- add(equipment: Equipment) {
- this.equipments.push(equipment);
- return this;
- }
- getPrice() {
- return this.equipments
- .map(equipment => equipment.getPrice())
- .reduce((a, b) => a + b);
- }
- }
- class Car extends Composite {
- constructor() {
- super();
- this.setName('Audi');
- }
- }
- const myCar = new Car().add(new Engine()).add(new Body()).add(new Tools());
- console.log(`${myCar.getName()} price is ${myCar.getPrice()}`);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement