Skip to content

Instantly share code, notes, and snippets.

@impulsenok
Last active May 26, 2018 10:03
Show Gist options
  • Save impulsenok/9eeb88f71242b17ca28a02725c6c588b to your computer and use it in GitHub Desktop.
Save impulsenok/9eeb88f71242b17ca28a02725c6c588b to your computer and use it in GitHub Desktop.
Factory pattern TypeScript example.
import Button from "../buttons/button.interface";
export default abstract class Dialog {
constructor() {}
public renderWindow(): void {
const okButton: Button = this.createButton();
okButton.render();
}
public abstract createButton(): Button;
}
export default interface Button {
render(): void;
onClick(): void;
}
import Dialog from "./factory/AbstractDialog";
import HtmlDialog from "./factory/HtmlDialog";
import JavaDialog from "./factory/JavaDialog";
export default class RunDemo {
constructor(private dialog: Dialog,
private dialogType: 'HTML' | 'JAVA') {}
private configure(): void {
if (this.dialogType === 'HTML') {
this.dialog = new HtmlDialog();
} else {
this.dialog = new JavaDialog();
}
}
private runBusinessLogic(): void {
this.dialog.renderWindow();
}
public mainProcess(): void {
this.configure();
this.runBusinessLogic();
}
}
import Button from "./button.interface";
export default class HtmlButton implements Button {
constructor() {}
render(): void {
console.log('HTML button was rendered!');
}
onClick(): void {
console.log('HTML onClick event was fired!');
}
}
import AbstractDialog from "./AbstractDialog";
import HtmlButton from "../buttons/html_button";
import Button from "../buttons/button.interface";
export default class HtmlDialog extends AbstractDialog {
constructor() { super() }
public createButton(): Button {
return new HtmlButton();
}
}
import Button from "./button.interface";
export default class JavaButton implements Button {
constructor() {}
render(): void {
console.log('There is a lot of stuff to render Java button!!!');
}
onClick(): void {
console.log('JAVA onClick event was fired!( A LOT OF STUFF WERE USED!!!)');
}
}
import AbstractDialog from "./AbstractDialog";
import JavaButton from "../buttons/java_button";
import Button from "../buttons/button.interface";
export default class JavaDialog extends AbstractDialog {
constructor() { super() }
public createButton(): Button {
return new JavaButton();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment