Bienvenido a la serie Patrones de diseño en TypeScript , que presenta algunos patrones de diseño útiles en el desarrollo web con TypeScript.
9 patrones de diseño que todo ingeniero debe conocerLos patrones de diseño son muy importantes para los desarrolladores web y podemos escribir un mejor código si los dominamos. En este artículo, usaré TypeScript para presentar el patrón de comando.
En iOS y macOS, hay una aplicación de accesos directos integrada . Con este programa, los usuarios pueden realizar rápidamente 1 o más tareas. Por ejemplo, tareas como enviar mensajes rápidamente, traducir texto, acortar URL y descargar archivos.
A continuación, implementemos una aplicación similar. En el siguiente código, definimos una Shortcutsclase, en la que creamos 5 métodos miembros como openUrl, shortenUrl, sendMessage, etc.
class Shortcuts {
openUrl(url: string) {
console.log(`Open url: ${url}`);
}
shortenUrl(url: string) {
console.log(`Shorten url: ${url}`);
}
sendMessage(msg: string) {
console.log(`Send message: ${msg}`);
}
translateText(originText: string) {
console.log(`Translate text: ${originText}`);
}
downloadFile(fileUrl: string) {
console.log(`Download file: ${fileUrl}`);
}
}
class UIEventHandler {
constructor(public shortcuts: Shortcuts) {}
handleAction(action: ShortcutsMethods, arg: string) {
this.shortcuts[action](arg);
}
}
// "openUrl" | "shortenUrl" | "sendMessage" | "translateText" | "downloadFile"
type ShortcutsMethods = Methods<Shortcuts>;
type Methods<T> = {
[P in keyof T]: T[P] extends (...args: any) => void ? P : never;
}[keyof T];
Con la UIEventHandlerclase, podemos usarla de la siguiente manera:
const shortcuts = new Shortcuts();
const eventHandler = new UIEventHandler(shortcuts);
eventHandler.handleAction("openUrl", "https://medium.com/@bytefer");
eventHandler.handleAction("sendMessage", "Hello Bytefer!");
handleActionmétodo, debemos asegurarnos de que el actionnombre sea consistente con el nombre del método en la Shortcutsclase.Shortcutsclase. Como resultado, necesitamos modificar constantemente la Shortcutsclase.
De hecho, podemos envolver tareas como enviar mensajes, traducir texto y acortar URL en comandos individuales.
interface Command {
name: string;
execute(args: any): any;
}
class OpenUrlCommand implements Command {
name = "openUrl";
execute(args: any) {
console.log(`Open url: ${args[0]}`);
}
}
class SendMessageCommand implements Command {
name = "sendMessage";
execute(args: any) {
console.log(`Send message: ${args[0]}`);
}
}
class CommandManager {
commands: Record<string, Command> = {};
registerCommand(name: string, command: Command) {
this.commands[name] = command;
}
executeCommand(command: string | Command, ...args: any) {
if (typeof command === "string") {
this.commands[command].execute(args);
} else {
command.execute(args);
}
}
}
class UIEventHandler {
constructor(public cmdManager: CommandManager) {}
handleAction(command: string | Command, arg: string) {
this.cmdManager.executeCommand(command, arg);
}
}
const commandManager = new CommandManager();
commandManager.registerCommand("openUrl", new OpenUrlCommand());
commandManager.registerCommand("msg", new SendMessageCommand());
const eventHandler = new UIEventHandler(commandManager);
eventHandler.handleAction("openUrl", "https://medium.com/@bytefer");
eventHandler.handleAction("msg", "Hello Medium!");
eventHandler.handleAction(new SendMessageCommand(), "Hello Bytefer!");
Open url: https://medium.com/@bytefer
Send message: Hello Medium!
Send message: Hello Bytefer!
Finalmente, resumamos los escenarios de uso del patrón de comando:
Si desea aprender TypeScript, no se pierda la serie Mastering TypeScript .
Con más de 30 artículos, no se confundirá cuando aprenda TypeScript¡Gracias por ser parte de nuestra comunidad! Antes de que te vayas:
Si queremos seguir prosperando en este planeta, vamos a tener que tener conversaciones peligrosas. Aquellas que desafían lo que hemos hecho, lo que estamos haciendo y lo que actualmente vamos a seguir haciendo (o planeamos hacer).
Introducción: Bienvenidos, valientes lectores, a un viaje que nos llevará a las profundidades más oscuras de nuestro planeta. En este blog, profundizamos en el enigmático mundo de la Fosa de las Marianas, descubriendo sus secretos ocultos y descubriendo las verdades escalofriantes que se encuentran debajo de su superficie.
“Él me protegerá cuando esté en peligro. Me esconderá en su tienda.
Puede ser un investigador de OSINT, un jugador de CTF o simplemente alguien que recibe llamadas no deseadas. Alguien que está tratando de verificar el número que viste en un anuncio.
En el mundo hiperconectado de hoy, los sistemas de medios juegan un papel fundamental en la formación de la opinión pública y, en consecuencia, en la toma de decisiones democrática. En su profundo análisis de la economía política de la comunicación, el académico Robert McChesney desafía la sabiduría convencional y presenta lo que él llama las “cinco verdades” sobre los medios.
Para evitar ambigüedades se utilizarán los siguientes términos; autenticador; El teléfono móvil que se utiliza para realizar el inicio de sesión en el sitio web; El sitio web o la aplicación que el usuario está utilizando para realizar el servicio de solicitud de inicio de sesión; El proveedor que proporciona el servicio dado, por ejemplo