亲们都用Nodejs写过神马设计模式呢?
亲们都用Nodejs写过神马设计模式呢?
赶脚用JS写模式好难:(
3 回复
写过工厂,单例,观察者,装饰者,策略。就用过这几个
当然,使用Node.js编写设计模式是非常常见且有用的。以下是一些常见的设计模式及其在Node.js中的实现示例。
单例模式 (Singleton Pattern)
单例模式确保一个类只有一个实例,并提供一个全局访问点。
class Database {
constructor(host, user, password) {
if (!Database.instance) {
this.host = host;
this.user = user;
this.password = password;
Database.instance = this;
}
return Database.instance;
}
connect() {
console.log(`Connected to database at ${this.host}`);
}
}
const db1 = new Database('localhost', 'user', 'password');
const db2 = new Database('remotehost', 'admin', 'admin');
db1.connect(); // 输出: Connected to database at localhost
db2.connect(); // 输出: Connected to database at localhost
工厂模式 (Factory Pattern)
工厂模式用于创建对象,而不需要指定具体的类。
class User {
constructor(name, email) {
this.name = name;
this.email = email;
}
getName() {
return this.name;
}
}
class Admin extends User {
constructor(name, email) {
super(name, email);
}
getRole() {
return "Admin";
}
}
function createUser(type, name, email) {
switch (type) {
case 'admin':
return new Admin(name, email);
default:
return new User(name, email);
}
}
const adminUser = createUser('admin', 'Alice', 'alice@example.com');
console.log(adminUser.getName()); // 输出: Alice
console.log(adminUser.getRole()); // 输出: Admin
观察者模式 (Observer Pattern)
观察者模式定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。
class Subject {
constructor() {
this.observers = [];
}
addObserver(observer) {
this.observers.push(observer);
}
removeObserver(observer) {
this.observers = this.observers.filter(obs => obs !== observer);
}
notify(data) {
this.observers.forEach(observer => observer.update(data));
}
}
class Observer {
update(data) {
console.log(`Received data: ${data}`);
}
}
const subject = new Subject();
const observer1 = new Observer();
const observer2 = new Observer();
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.notify("Hello World"); // 输出: Received data: Hello World
// Received data: Hello World
subject.removeObserver(observer1);
subject.notify("Hello Node.js"); // 输出: Received data: Hello Node.js
希望这些示例对你有所帮助!如果你有任何问题或需要更详细的解释,请随时提问。