For creating better understanding, let implement the abstract design pattern the way it fit in real scenario.
There ia a company on large scale build cars in large numbers. They build different types of cars.
Petrol, Electric, Hybrid.
But there was a big problem
Problem: Wrong Parts, Wrong Car
Car builder mixes the parts in cars,
Put petrol engine in electric car and Electric tyres in Petrol car.
In result the car explosion, customers got angry and choas!
Than Leadership of the company summoned the best engineers to fix this problem.
He said we need a system where,
1. Right part fit in the right car.
2. Builder no need to know the making of the parts they just build the car.
3. We can add new car easily in future.
So Engineers decide to have a Abstract Factory Design pattern.
Abstract Factory
Engineer Build the abstract factory(Main Factory) that is blueprint(Interface). This will decide what will be build in the factory.
This insure that every factory to be build these two things.
1. Engine
2. Tyre
Now Production factory is divided into multiple factories and each factory will responsible for development of only specific type of engine (Electric, petrol, Hybrid etc).
ElectricCarFactory
This factory will only develop Electric Engine.
PetrolCarFactory
This factory will only develop Petrol Engine.
Car Work Shop (Client Code)
This is the assembly line where decide which factory is selected. Now builder are not in worry about the mixing of the parts.
Now Choose the factory, desire car will automatically will be build.
Achievements
1. Factories made the right product
2. Now builder not worry about the mixing of the parts.
3. that is important we can Develop new type of car (hybrid). We can add/create new factory.
Real world Application Example
1. Integration Payment Gateways
Integrating new Payment gateway alongside with existing payment gateway for customer to have multiple option of making online payment.
Support your system work with stripe, Now you want to add new payment gateway Paypal.
You will choose to abstract design pattern you that client have option to preceed with one payment method at a time.
2. Connecting legacy system with new system
Let say you have old logging system and it have its implementation of logging.
But your new app expects.
You can you Abstract factory design pattern to reuse the old class without changing.
3. Laravel Socialite Login System
System have the ability to login either though Google Api, Facebook Api, Github Api.
Using Specific Api to login on user login preference.
Comments
Post a Comment