All quizzesMedium
Structural Patterns
Preview — 3 of 10 questions
What is the difference between Factory and Abstract Factory patterns?
javascript
class ButtonFactory {
static create(type) {
if (type === "submit") return new SubmitButton();
if (type === "cancel") return new CancelButton();
}
}
const submitBtn = ButtonFactory.create("submit");AThey are the same thing.
BFactory creates instances of one family of objects; Abstract Factory creates instances of multiple related families.
CFactory is abstract; Abstract Factory is concrete.
DAbstract Factory is deprecated.
What is the Mixin pattern?
javascript
// Mixin 1: Can fly
const CanFly = {
fly() {
return `${this.name} is flying`;
}
};
// Mixin 2: Can swim
const CanSwim = {
swim() {
return `${this.name} is swimming`;
}
};
// Mixin 3: Can bark
const CanBark = {
bark() {
return `${this.name} says woof!`;
}
};
// Create a Duck with multiple mixins
class Duck {
constructor(name) {
this.name = name;
}
}
// Mix in the methods
Object.assign(Duck.prototype, CanFly, CanSwim, CanBark);
const duck = new Duck("Donald");
console.log(duck.fly()); // "Donald is flying"
console.log(duck.swim()); // "Donald is swimming"
console.log(duck.bark()); // "Donald says woof!"AMixing different programming languages together.
BMixing synchronous and asynchronous code.
CAdding methods and properties from multiple objects to a single object.
DA deprecated pattern not used anymore.
What does the Command pattern do?
javascript
// Command interface
class Command {
execute() { }
undo() { }
}
// Concrete commands
class TurnOnLight extends Command {
constructor(light) {
super();
this.light = light;
}
execute() {
this.light.turnOn();
}
undo() {
this.light.turnOff();
}
}
class TurnOffLight extends Command {
constructor(light) {
super();
this.light = light;
}
execute() {
this.light.turnOff();
}
undo() {
this.light.turnOn();
}
}
// Receiver
class Light {
turnOn() {
console.log("Light is on");
}
turnOff() {
console.log("Light is off");
}
}
// Invoker
class RemoteControl {
constructor() {
this.commands = [];
}
execute(command) {
command.execute();
this.commands.push(command);
}
undo() {
const command = this.commands.pop();
if (command) command.undo();
}
}
// Usage
const light = new Light();
const remote = new RemoteControl();
remote.execute(new TurnOnLight(light)); // "Light is on"
remote.execute(new TurnOffLight(light)); // "Light is off"
remote.undo(); // "Light is on"AExecutes commands in the terminal.
BCreates a command-line interface.
CEncapsulates a request as an object, allowing parameterization and queuing of operations.
DPrevents execution of commands.
Sign up free to play
Answer all 10 questions (7 more), see explanations for every answer, and track your score.