Skip to content

Instantly share code, notes, and snippets.

@Akash52
Last active April 5, 2024 05:42
Show Gist options
  • Save Akash52/e98189092788ffd09d0c7d42918b3d66 to your computer and use it in GitHub Desktop.
Save Akash52/e98189092788ffd09d0c7d42918b3d66 to your computer and use it in GitHub Desktop.
interface Data {
id: number;
name: string;
}
// Abstraction layer representing a database
interface Database {
save(data: Data): void;
update(data: Data): void;
}
// High-level module depending on Database interface
class DataManager {
constructor(private database: Database) {}
saveData(data: Data): void {
this.database.save(data);
}
updateData(data: Data): void {
this.database.update(data);
}
}
// Low-level module implementing Database interface for MySQL
class MySQLDatabase implements Database {
save(data: Data): void {
console.log("Data saved to MySQL database");
}
update(data: Data): void {
console.log("Data updated in MySQL database");
}
}
// Low-level module implementing Database interface for MongoDB
class MongoDBDatabase implements Database {
save(data: Data): void {
console.log("Data saved to MongoDB database");
}
update(data: Data): void {
console.log("Data updated in MongoDB database");
}
}
// Creating an instance of MySQLDatabase (low-level module)
const mySQLDatabase = new MySQLDatabase();
// Creating an instance of DataManager (high-level module)
const dataManager = new DataManager(mySQLDatabase);
// Using DataManager methods
dataManager.saveData({ id: 1, name: "John" });
dataManager.updateData({ id: 1, name: "John Doe" });
// Creating an instance of MongoDBDatabase (low-level module)
const mongoDBDatabase = new MongoDBDatabase();
// Creating another instance of DataManager with MongoDBDatabase
const anotherDataManager = new DataManager(mongoDBDatabase);
// Using DataManager methods with MongoDB
anotherDataManager.saveData({ id: 2, name: "Alice" });
anotherDataManager.updateData({ id: 2, name: "Alice Smith" });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment