前端开发中运用多种设计模式可以提高代码的可维护性、可扩展性和可复用性。以下是一些常见的前端设计模式:
class Singleton {
constructor() {
if (!Singleton.instance) {
this.data = [];
Singleton.instance = this;
}
return Singleton.instance;
}
addItem(item) {
this.data.push(item);
}
getData() {
return this.data;
}
}
const singleton1 = new Singleton();
const singleton2 = new Singleton();
console.log(singleton1 === singleton2); // true
class Button {
constructor(text) {
this.text = text;
}
render() {
return `${this.text}`;
}
}
class Link {
constructor(text, url) {
this.text = text;
this.url = url;
}
render() {
return `${this.url}">${this.text}`;
}
}
class ElementFactory {
createElement(type, ...args) {
if (type === 'button') {
return new Button(...args);
} else if (type === 'link') {
return new Link(...args);
}
return null;
}
}
const factory = new ElementFactory();
const button = factory.createElement('button', 'Click me');
const link = factory.createElement('link', 'Google', 'https://www.google.com');
console.log(button.render());
console.log(link.render());
function logDecorator(component) {
return class extends React.Component {
componentDidMount() {
console.log('Component mounted');
}
render() {
return <component {...this.props} />;
}
};
}
class MyComponent extends React.Component {
render() {
return <div>My Component</div>;
}
}
const DecoratedComponent = logDecorator(MyComponent);
class Image {
constructor(src) {
this.src = src;
this.loadImage();
}
loadImage() {
console.log(`Loading image from ${this.src}`);
}
display() {
console.log(`Displaying image from ${this.src}`);
}
}
class ProxyImage {
constructor(src) {
this.src = src;
this.realImage = null;
}
display() {
if (!this.realImage) {
this.realImage = new Image(this.src);
}
this.realImage.display();
}
}
const proxy = new ProxyImage('https://example.com/image.jpg');
proxy.display();
class EventEmitter {
constructor() {
this.events = {};
}
on(eventName, callback) {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(callback);
}
emit(eventName, ...args) {
if (this.events[eventName]) {
this.events[eventName].forEach(callback => callback(...args));
}
}
off(eventName, callback) {
if (this.events[eventName]) {
this.events[eventName] = this.events[eventName].filter(cb => cb!== callback);
}
}
}
const emitter = new EventEmitter();
const callback = (message) => {
console.log(`Received message: ${message}`);
};
emitter.on('message', callback);
emitter.emit('message', 'Hello, world!');
emitter.off('message', callback);
emitter.emit('message', 'This message won\'t be received.');
class ButtonState {
constructor(button) {
this.button = button;
}
click() {}
render() {}
}
class NormalState extends ButtonState {
click() {
console.log('Button clicked');
}
render() {
return '';
}
}
class DisabledState extends ButtonState {
click() {
console.log('Button is disabled');
}
render() {
return '';
}
}
class Button {
constructor() {
this.state = new NormalState(this);
}
setState(state) {
this.state = state;
}
click() {
this.state.click();
}
render() {
return this.state.render();
}
}
const button = new Button();
button.click();
button.setState(new DisabledState(button));
button.click();
以上只是前端开发中常见的一些设计模式,实际应用中可以根据具体需求选择合适的设计模式来优化代码。