Great explanation ! For all confused about why use decorator at all, please see that the decorators do not have an existence by themselves and are useful only in conjunction with the main product. Instantiating cheese just by itself has no meaning, it is not a burger type, it is an add on. It has to have a burger instance for it to exist. That's why decorator class and the reason why this is a 'structural' pattern. However, I do feel that the Builder pattern can be used by the client code to build the final add-on decorator product, and the 2 products - burger and add-on decorator can finally be processed. @rite2riddhi please comment on this question.
Same can also be done by Builder pattern. For eg: Builder.addCheese(true).build(). The builder would be part of the Burger abstract class and since TandooriBurger and ZingerBurger extend Burger, so they will also get the Builder.
ThankYou for this highly informative video. I have one question, Can you please tell why can't we use a Builder pattern here, to make the Burger with all extra toppings (where all different toppings implement an interface), and then appending / adding topping's description and cost with burger's description and cost with every topping added and then finally build the burger.
Um you can. But this ideally seems a better way. Because most of the time your burger gonna contain null values. And in the cost() , there would be lot of null checks. Code readability :)
Sir, are decorators always abstract? If it is festival time and we need to introduce some cost discounts, we can directly write the common function inside the decorator class instead of changing both cheese and mayonnaise classes.
Didn't understand the use of Decorator abstract class here.. ExtraCheese class can also be the direct child of the Burger abstract class right? Am I missing something here 🤔
I was also thinking the same doubt, why do we need to make an extra abstract class? if we can achieve the same result by just inheriting the burger class. But I think He is doing that, just for the sake of differentiation between burgers and decorators as well as the readability of code.
Currently doesn't seems to have use-case of BurgerDecorator, as it is just empty abstract class, but in some cases we might need this layer, let's say for coffee maker, there can be a chocolate topping and there can be multiple chocolate types like dark chocolate, standard chocolate, etc. and all these type of chocolates should have some common property of chocolate, in that case chocolateDecorator with common property of chocolate will be required an abstract class.
Here he added the burger object in both cheese and mayonnaise classes, but we can use decorator class to create the object right there without doing the same work multiple times in addons of cheese classes.
@@rite2riddhi I think the decorator class may be needed if we need to add a decoration like smilies or any other shapes into our Burger. Correct me If I was wrong.
Alternately, the Burger Decorator could keep a pointer to the Burger instance which would have been passed to it through it's constructor. Anyway, both seem fine.
I wanted to know which is a good practice considering scalability/extensibility? Passing the burger instance by reference or passing the burger instance's copy? (By value)
Top notch explanation with great clarity. Thanks
Hi Riddhi, you are really great at explaining end to end in simple way... Please add other remaining design pattern videos as well. Thanks buddy.
Great! helping me revising my OOP concepts as well as getting some insights on LLD and Design Patterns.
Great explanation !
For all confused about why use decorator at all, please see that the decorators do not have an existence by themselves and are useful only in conjunction with the main product. Instantiating cheese just by itself has no meaning, it is not a burger type, it is an add on. It has to have a burger instance for it to exist. That's why decorator class and the reason why this is a 'structural' pattern.
However, I do feel that the Builder pattern can be used by the client code to build the final add-on decorator product, and the 2 products - burger and add-on decorator can finally be processed. @rite2riddhi please comment on this question.
what would be the real use case in industry.
i know few like text decorator in text based applications, ui development tools using components
great explanation ::Thanks
Why do we need another abstract class birgerdecorator and not use the burger class itself ?
good code explanation
Superb
great content 🎉
Thanks
Same can also be done by Builder pattern. For eg: Builder.addCheese(true).build(). The builder would be part of the Burger abstract class and since TandooriBurger and ZingerBurger extend Burger, so they will also get the Builder.
great video ...pls cover more design patterns
Yes sure.
Very nice video. Thanks for making it
Thanks man
Understood! And also hungry now!😂
ThankYou for this highly informative video. I have one question, Can you please tell why can't we use a Builder pattern here, to make the Burger with all extra toppings (where all different toppings implement an interface), and then appending / adding topping's description and cost with burger's description and cost with every topping added and then finally build the burger.
Um you can. But this ideally seems a better way. Because most of the time your burger gonna contain null values. And in the cost() , there would be lot of null checks. Code readability :)
Please add more videos in this series .
Hi, great content & explanation, appreciate it. How can I get the code you wrote? could you share it?
Sir, are decorators always abstract? If it is festival time and we need to introduce some cost discounts, we can directly write the common function inside the decorator class instead of changing both cheese and mayonnaise classes.
Great 💖
Thanks
Nice video
Didn't understand the use of Decorator abstract class here.. ExtraCheese class can also be the direct child of the Burger abstract class right? Am I missing something here 🤔
I was also thinking the same doubt, why do we need to make an extra abstract class? if we can achieve the same result by just inheriting the burger class. But I think He is doing that, just for the sake of differentiation between burgers and decorators as well as the readability of code.
@@obsessiveDreamer Makes Sense
Nice
what is the point of adding this BurgerDecorator , can't we directly do this in the ExtraChesse Class?
Currently doesn't seems to have use-case of BurgerDecorator, as it is just empty abstract class, but in some cases we might need this layer, let's say for coffee maker, there can be a chocolate topping and there can be multiple chocolate types like dark chocolate, standard chocolate, etc. and all these type of chocolates should have some common property of chocolate, in that case chocolateDecorator with common property of chocolate will be required an abstract class.
Here he added the burger object in both cheese and mayonnaise classes, but we can use decorator class to create the object right there without doing the same work multiple times in addons of cheese classes.
Do we actually need the decorator class, I mean we can simply extend burger class for with cheese and mayo?
Otherwise how would you differentiate a normal burger like a zinger burger and a burger decorator?
@@rite2riddhi I think the decorator class may be needed if we need to add a decoration like smilies or any other shapes into our Burger. Correct me If I was wrong.
great explaination. Now I just feel like having a burger.
hi manisha ji, u r very beautiful
Alternately, the Burger Decorator could keep a pointer to the Burger instance which would have been passed to it through it's constructor.
Anyway, both seem fine.
I wanted to know which is a good practice considering scalability/extensibility? Passing the burger instance by reference or passing the burger instance's copy? (By value)
Please put more low level design videos
Not Cheese miyo, the explanation is butter
codee dada?
Hey riddhi
One suggestion is that please speak slowly and apart from this everything is good.
I want to eat zinger burger after watching this video.
We dont need watch memes or stupid video clips during the video.