📘 Premium Read: Access my best content on Medium member-only articles — deep dives into Java, Spring Boot, Microservices, backend architecture, interview preparation, career advice, and industry-standard best practices.
✅ Some premium posts are free to read — no account needed. Follow me on Medium to stay updated and support my writing.
🎓 Top 10 Udemy Courses (Huge Discount): Explore My Udemy Courses — Learn through real-time, project-based development.
▶️ Subscribe to My YouTube Channel (172K+ subscribers): Java Guides on YouTube
Factory Method Structure
Factory Method Example
interface Product {
doSomething(): void;
}
interface Factory {
createProduct(name: string): Product;
}
class ConcreteProductA implements Product {
doSomething(): void {
console.log('Product A do this');
}
}
class ConcreteProductB implements Product {
doSomething(): void {
console.log('Product B do this');
}
}
class ConcreteProductC implements Product {
doSomething(): void {
console.log('Product C do this');
}
}
class ProductFactory implements Factory {
createProduct(name: string): Product {
switch (name) {
case 'product-a':
return new ConcreteProductA();
case 'product-b':
return new ConcreteProductB();
case 'product-c':
return new ConcreteProductC();
default:
return null;
}
}
}
(function main() {
const factory = new ProductFactory();
const productA = factory.createProduct('product-a');
productA.doSomething();
const productB = factory.createProduct('product-b');
productB.doSomething();
const productC = factory.createProduct('product-c');
productC.doSomething();
})()
- Compile the above code using the TypeScript compiler.
- Above code is compiled to plan JavaScript code
- Run Javascript code using node
C:\typescript-design-patterns\factory-method> tsc .\factory-method.ts
C:\typescript-design-patterns\factory-method> node .\factory-method.js
Product A do this
Product B do this
Product C do this
var ConcreteProductA = /** @class */ (function () {
function ConcreteProductA() {
}
ConcreteProductA.prototype.doSomething = function () {
console.log('Product A do this');
};
return ConcreteProductA;
}());
var ConcreteProductB = /** @class */ (function () {
function ConcreteProductB() {
}
ConcreteProductB.prototype.doSomething = function () {
console.log('Product B do this');
};
return ConcreteProductB;
}());
var ConcreteProductC = /** @class */ (function () {
function ConcreteProductC() {
}
ConcreteProductC.prototype.doSomething = function () {
console.log('Product C do this');
};
return ConcreteProductC;
}());
var ProductFactory = /** @class */ (function () {
function ProductFactory() {
}
ProductFactory.prototype.createProduct = function (name) {
switch (name) {
case 'product-a':
return new ConcreteProductA();
case 'product-b':
return new ConcreteProductB();
case 'product-c':
return new ConcreteProductC();
default:
return null;
}
};
return ProductFactory;
}());
(function main() {
var factory = new ProductFactory();
var productA = factory.createProduct('product-a');
productA.doSomething();
var productB = factory.createProduct('product-b');
productB.doSomething();
var productC = factory.createProduct('product-c');
productC.doSomething();
})();
Comments
Post a Comment
Leave Comment