I always wondered why "is-a" and "has-a" relationship between objects is even worth mentioning, but now I know just how important they are. It's amazing how a small detail like this can completely change the way we approach programming.
I worked in both product and service industry of small, medium and large size company, i can see the clear understanding and explanation by the narrator on each of the topic and make an analogy to live code in my work. Very well explained in details, that too free of charge ,i recommend these videos to all the freshers or laterals who are working in java for upskilling.
Wish had explored your channel a bit earlier, awesome content on Low-level design(one-stop solution), Just feedback if you can arrange the videos of the playlist in what order to watch it will be really great for people.
Thank you Yash, not sure if youtube does not show playlist title and description, i have mentioned in both the place that Start from bottom and move Upward, let me check
Bhai ek number i never imagined that i can also understand LLD. Every said that LLD and HLD is hard but now i feel i can also learn these concepts. Thanks bro and can you suggest the book that help me to learn HLD and LLD. It will be very helpful.❤❤
Such awesome content, then its free. i cant explain how satisfied i am satisfied with your content. Thanks a lot bro. i have one request bro, whether you provide content free or paid, it does matter. just keep up. i have seen lots of videos and read books regarding design pattern. nobody explained like you. one thing makes your content unique, you deeply explain OOP concept behind design pattern.
this video is a GEM to the whole community, that too by a GEM..... hats off 2 u sir.. all this premium content for free , not possible on this whole planet itself,.... wish the java playlist would also become public / free someday , so that it can reach to every deserving candidate who cant afford the subscription at that point of time... s teachers like you are rare to find, your knowledge is uncomparable...
public class PizzaShop { public static void main(String[] args) { BasePizza base = new VegDelight(); System.out.println(base.cost()); BasePizza customPizza = new ExtraCheese(new Mushroom(new Farmhouse())); System.out.println(customPizza.cost()); } }
How do we handle the case where 2 features are not compatible with each other? For eg. Say in car configurator, user selected both chrome grill and black grill, one of them has to be removed. First the user selects chrome grill so price increases by 100, then user selects black grill so first we have to reduce price by 100 which is for chrome grill, then we add 80 for the black grill.
To easy understanding of layer, we can follow below object instantiations // Here Customer first adds Farmhouse pizza // then adds extra cheese on top of if // then add extra mushroom // we can pass same BasePizza object to new topping BasePizza pizza = new Farmhouse(); pizza = new ExtraCheese(pizza); pizza = new ExtraMushroom(pizza);
Let's say we have created a pizza object with 3 toppings, how do we backtrack to know which toppings and which base pizza was selected while storing in the db ?
Super clear, I had a doubt: So according to this example "ExtraCheese" is a BasePizza due to indirect inheritance. So in Vehicle example, the decorator would extend the BaseVehicle. Power Steering would inherit from decorator and in-directly have a "is-a" relationship with BaseVehicle, right So in a way we are saying power-steering is a BaseVehicle so is it right? As power steering is not a Vehicle rather its a feature
Hi, Suppose we have an abstract pizza class and an abstract toppings class which are inherited by concrete classes . Now, every pizza class has a list of toppings . So, when we calculate the cost, we just iterate over that list and compute the total cost. I have a big doubt that if only has-a relationship is solving this problem. Why do we need such a complex structure of has-a and is-a relationship existing at the same time and what extra advantage does decorator pattern bring into picture ?Looking forward to your reply to this question.
okay, could you please tell me, how you would solve the scenario where you have 1000s of combination like BasePizze, BasePizze + cheese , BasePizza + mushroom, Veggie + cheese and go on...... The biggest advantage decorator pattern adds up is control on number of classes if there are so so many combinations possible.
@@ConceptandCoding Thanks for your reply. Lets suppose Base pizza is extended by two Pizza class Veg and Non Veg Pizza. I have another ExtraAddOn class which is inherited by say cheese, mushroom, paneer and so on ... Now, I have a " vector extraList; " in Veg and Non Veg Pizza class. So, whatever combinations of ExtraAddOn you need, you can add to that list and calculate cost. Only thing is that you cannot mix the base Pizza options, but i don't think that's the requirement here. Am i thinking it wrong ?
In my approach, I used an interface for defining a behavior and then created multiple concrete classes implementing this interface, each representing a different behavior. This seems somewhat similar to the Decorator Pattern, where each decorator wraps an object and adds its behavior. However, I'm struggling to see a significant advantage of the Decorator Pattern over my approach in terms of scalability, flexibility, and maintainability, especially when considering the addition of new behaviors. In both cases, adding a new behavior seems to require just adding a new class without modifying existing ones. Could you help clarify the specific advantages of using the Decorator Pattern over this approach?
You have created A,B C different concrete classes. If you want to create new concrete classes with properties of lets say B , with decorator pattern you will have B1 , B2 etc. But without decorator pattern you might have to write more code to not only include the property of B but also its own new property. I hope this helps.
Why are we using ToppingDecorator? If we are anyways inheriting Extracheese then can't we inherit it directly from BasePizza as we aren't doing anything in ToppingDecorator class?
Thanks for the explaination. Really loving LLD. Used interface instead of abstract class for BasePizza and Toppings. Do you think there will be an issue in this approach?
really thank you sir for your huge efforts, but sir, if we keep a final ingredients price Map in Base Pizza itself, and keep Topping Map containing topping and its frequency, this can be solved much simply for calculating the price, but then again that solution is not scalable ig when toppings list and price need to be updated, thanks again.
yeah it can directly extend BasePizza but abstract decorator can help in avoiding code duplication. In video it was not showed but instead of creating BasePizza instance in each of the decorator subclasses, you can use abstract Decorator class to handle that functionality and it would make sure that all decorator subclasses will follow same structure
Firstly loving your videos! So thanks for that Q. Is this really good to do something like new ExtraCheeze( new ExtraPanner(new FarmHousePizza())))... B'coz not Basepizza object in ExtraCheese already contains a topping of ExtraPanner.... While if we were not to use Decorator design pattern... We would have had all the toppings on same level... (May be with a boolean flag) It might matter if we don't want cheese on top of panner but panner and cheese mixed very well... (Sty could not think of a better example)
Hi, Thanks for the great explanation. One small request could you please share the notes and the code that you are using for the explaination in each video. It would be beneficial.
I always wondered why "is-a" and "has-a" relationship between objects is even worth mentioning, but now I know just how important they are. It's amazing how a small detail like this can completely change the way we approach programming.
Glad to know that
I worked in both product and service industry of small, medium and large size company, i can see the clear understanding and explanation by the narrator on each of the topic and make an analogy to live code in my work. Very well explained in details, that too free of charge ,i recommend these videos to all the freshers or laterals who are working in java for upskilling.
Just can not believe that this piece of gem is free on youtube !!
Really appreciate your efforts. :)
Unbelievable that we are getting this video for free of cost.... Awesome explanation.
bhai ne kuch videos paid kr di 😁
Amazing concept, learning LLD is really an eye-opener. Thanks for this amazing video and explanation.
Thank you, pls do share it with your connections 😊
Thank you so much for explaining in very detailed manner with code . This helps to understand the topic clearly instead of having doubts..
Thanks Shrayansh for making these lld videos easier to understand. Apprepriate all your hard work.
very good explanation is the best, simplicity is the base here and visual representation is toppings
Superb explanation. To recollect decorator pattern, I will remember the pizza example. Thanks a lot of this super useful video.
Welcome
🤯🤯🤯🤯🤯
Swaad hi agya 😋😋😋😛.
Thanks Shreyansh for this Amazing vedio series. Great content. And Beautifully explained.
Nice point : both isA and hasA property is needed! Awesome Explanation!
Well structured and explained! Thanks a lot!
I really appreciate your efforts thankyou so much😇😇😇😇👏👏👏👏👏
The way you explain with examples it makes the concept very clear..Keep it up and thank you very much :)
Glad it helped!
'Has a' and 'is a' make concept much simpler to understand. Good point you make to explain.
Awesome explanation Sir. Thank you very much
Wish had explored your channel a bit earlier, awesome content on Low-level design(one-stop solution), Just feedback if you can arrange the videos of the playlist in what order to watch it will be really great for people.
Thank you Yash, not sure if youtube does not show playlist title and description, i have mentioned in both the place that Start from bottom and move Upward, let me check
Great job Shrayansh .
I can totally relate Decorator Design Pattern now, yestarday only i ate the 'PIZZA' now i'm learning and watching it. 😃✌
:)
Very good explanation with code...u did awesome job. really thanks a lot.
Thank you
thoda nhi, bahut useful h bhai, please continue LLD series, you are one of best educators on RUclips
thank you Prashant. means lot to me.
Great content. First time i am feeling confident about LLD. Please share your knowledge more with us :)
Thanks there is a complete in depth playlist Manashi:)
@@ConceptandCoding Yes am checking. Thanks again for the content.
Bhai ek number i never imagined that i can also understand LLD. Every said that LLD and HLD is hard but now i feel i can also learn these concepts. Thanks bro and can you suggest the book that help me to learn HLD and LLD. It will be very helpful.❤❤
Amazing video Shrayansh!!
Thanks paji
Thanks for sorting it in "reverse" order. Glad that you considered the feedback. 😀
👍
Thank you sir..today I start calling u sir..Thank you for ur efforts 🙏
Thanks a lot buddy but call me Shrayansh, we both are students,let's keep learning and sharing
Such awesome content, then its free. i cant explain how satisfied i am satisfied with your content. Thanks a lot bro. i have one request bro, whether you provide content free or paid, it does matter. just keep up. i have seen lots of videos and read books regarding design pattern. nobody explained like you. one thing makes your content unique, you deeply explain OOP concept behind design pattern.
Thanks Saifur
Great Explanation. Thanks for the video🙏
thank you
Thanks Shreyansh. Video is very helpful in understanding. I have implemented the same in python. Awesome initiative
Glad to hear that
Awesome, simply awesome
Thank you
Really helpful ❤
this video is a GEM to the whole community, that too by a GEM..... hats off 2 u sir.. all this premium content for free , not possible on this whole planet itself,....
wish the java playlist would also become public / free someday , so that it can reach to every deserving candidate who cant afford the subscription at that point of time... s teachers like you are rare to find, your knowledge is uncomparable...
Thanks buddy
I really understood this design pattern. thank you sir for wonderful explaination
thank you
Thanks for the explanation with the examples.
Thank you sir for another awesome video.
Thank t
Nice video. You can add the main class with example of creation of these objects and using them that would help understand the concept better.
public class PizzaShop {
public static void main(String[] args) {
BasePizza base = new VegDelight();
System.out.println(base.cost());
BasePizza customPizza = new ExtraCheese(new Mushroom(new Farmhouse()));
System.out.println(customPizza.cost());
}
}
very useful very nice video
Great expansion 😃 ....
Thank you
If i need 2* cheese 3* mushroom , how it can be achieved , instead of mutiple classes we can have db to store the details ?
Great work !
Awesome explanation
Thanks
LLD k members only videos mai jo questions hai like design parking lot etc unke code bhi included?
Very Well explained sir!
Thanks for this playlist sir. Means a lot to us
Thank you
mindblowing!!!!
Maza Aagya
respect++
Thanks
Thanks!
thanks a lot buddy for super thanks 🙏
@@ConceptandCodinghello sir , i want to become member so I can access all your videos of this lld series. Please tell me the process
at channel home page you will find the join button, there you can join “Unlock LLD, HLD..” one
@@ConceptandCoding thanks joined
Awesome Explantion
Thank you
J is silent in jalapeno😅. Rest video was awesome!!
Great Video , thanks a lot
Glad you liked it!
Thank you so much for the detailed explanation :)
How do we handle the case where 2 features are not compatible with each other? For eg. Say in car configurator, user selected both chrome grill and black grill, one of them has to be removed. First the user selects chrome grill so price increases by 100, then user selects black grill so first we have to reduce price by 100 which is for chrome grill, then we add 80 for the black grill.
Great explanation. But I need to revisit the example once again.
Very helpfull video
perfect brother i understood
To easy understanding of layer, we can follow below object instantiations
// Here Customer first adds Farmhouse pizza
// then adds extra cheese on top of if
// then add extra mushroom
// we can pass same BasePizza object to new topping
BasePizza pizza = new Farmhouse();
pizza = new ExtraCheese(pizza);
pizza = new ExtraMushroom(pizza);
Awesome😍
Thanks
Thank you Sir
You are awesomeee🔥🔥❤
Thank you
@@ConceptandCoding
Could you please explain for the Pizza example, why not use builder pattern instead?
Great explanation! :)
Thank you
what was the use of declaring the has a in toppings[ extraCheese] , are we using it some where?
@ConceptandCoding Why do we we use abstract class here an not interface ?
Can we use interface instead of abstract class..I both in this case both will work fine
hey Shrayansh , i have one query in base abstract class why cannot we set quantity of toppings and calculate cost ?
Let's say we have created a pizza object with 3 toppings, how do we backtrack to know which toppings and which base pizza was selected while storing in the db ?
thanks for detailed video -- why BasePizza and ToppingDecorator in not defined as Interface ?
I din understand isA and hasA property can you point out which video to watch.
why is base pizza and topping decorator abstarct classes ? can they be interfaces? Iam not able to justify this point properly
why you used abstract class , can we use interfaces also ?
faad diya bhai
will the code break if we remove has a relationship(don't extend) in toppingdecorator? I think it will not break atleast in your example
thanks for the video
Super clear, I had a doubt: So according to this example "ExtraCheese" is a BasePizza due to indirect inheritance.
So in Vehicle example, the decorator would extend the BaseVehicle. Power Steering would inherit from decorator and in-directly have a "is-a" relationship with BaseVehicle, right
So in a way we are saying power-steering is a BaseVehicle so is it right? As power steering is not a Vehicle rather its a feature
Correct, if you want this pattern and design car with this way. Then you are right
keep going :)
Very thanks
Can you explain what does has-a keyword mean , here ?
@13:34
Ack
@@ConceptandCoding I didn't understood, had had one doubt could we do this by creating interfaces as well ?
Thank you so much for the amazing contents
Thank you
Hi,
Suppose we have an abstract pizza class and an abstract toppings class which are inherited by concrete classes . Now, every pizza class has a list of toppings . So, when we calculate the cost, we just iterate over that list and compute the total cost. I have a big doubt that if only has-a relationship is solving this problem. Why do we need such a complex structure of has-a and is-a relationship existing at the same time and what extra advantage does decorator pattern bring into picture ?Looking forward to your reply to this question.
okay, could you please tell me, how you would solve the scenario where you have 1000s of combination like
BasePizze,
BasePizze + cheese ,
BasePizza + mushroom,
Veggie + cheese and go on......
The biggest advantage decorator pattern adds up is control on number of classes if there are so so many combinations possible.
@@ConceptandCoding Thanks for your reply.
Lets suppose Base pizza is extended by two Pizza class Veg and Non Veg Pizza. I have another ExtraAddOn class which is inherited by say cheese, mushroom, paneer and so on ...
Now, I have a " vector extraList; " in Veg and Non Veg Pizza class.
So, whatever combinations of ExtraAddOn you need, you can add to that list and calculate cost.
Only thing is that you cannot mix the base Pizza options, but i don't think that's the requirement here. Am i thinking it wrong ?
Please explain when to use decorator pattern and builder design pattern and differemces. Both seems similar.
In my approach, I used an interface for defining a behavior and then created multiple concrete classes implementing this interface, each representing a different behavior. This seems somewhat similar to the Decorator Pattern, where each decorator wraps an object and adds its behavior.
However, I'm struggling to see a significant advantage of the Decorator Pattern over my approach in terms of scalability, flexibility, and maintainability, especially when considering the addition of new behaviors. In both cases, adding a new behavior seems to require just adding a new class without modifying existing ones. Could you help clarify the specific advantages of using the Decorator Pattern over this approach?
You have created A,B C different concrete classes. If you want to create new concrete classes with properties of lets say B , with decorator pattern you will have B1 , B2 etc. But without decorator pattern you might have to write more code to not only include the property of B but also its own new property.
I hope this helps.
Why are we using ToppingDecorator? If we are anyways inheriting Extracheese then can't we inherit it directly from BasePizza as we aren't doing anything in ToppingDecorator class?
So here inheritance is only used for type matching and composition is used to get the behaviour.
It will give us flexibility in future
Others : Learning Decorator Pattern from this Video
Meanwhile me -> Learning and Ordering a Margarita Pizza after watching 😂
:)
Thanks for the explaination. Really loving LLD. Used interface instead of abstract class for BasePizza and Toppings. Do you think there will be an issue in this approach?
Nope that's also good
Can we have array if Toppings in Pizza Class and while calc cost in Pizza class add topping's cost also. 🤔
really thank you sir for your huge efforts, but sir, if we keep a final ingredients price Map in Base Pizza itself, and keep Topping Map containing topping and its frequency, this can be solved much simply for calculating the price, but then again that solution is not scalable ig when toppings list and price need to be updated, thanks again.
Can you show the working demo as well. Need to understand how is main working. Based on input(order is magaretia plus extra cheese etc..)?
ExtraCheese and mushroom can also extend basePizza right?
Why do we have another abstract class in between?
Exactly. I have the same question in my mind.
yeah it can directly extend BasePizza but abstract decorator can help in avoiding code duplication. In video it was not showed but instead of creating BasePizza instance in each of the decorator subclasses, you can use abstract Decorator class to handle that functionality and it would make sure that all decorator subclasses will follow same structure
Do you have any github repo for notes or doc link ?
Coming from a C++ background. Why did you use abstract class over interface here?
How is a topping "is-A" basePizza? Does that make sense?
can we use interface instead of abstract class
Such a great content!:)
Thank you so much!
can we not use interfaces instead of abstract classes ?
For the pizza making or adding accessories to car, builder design pattern seems more useful. What’s your say?
could you please try to implement it and see what challenge you are facing.
Sir please help. I have taken membership and it is showing member as well but not able to see the Parking lot. or other imp videos uploaded.
Hi Prashant, to unlock LLD questions, you need "Unlock LLD, HLD, Java" membership level.
I think currently you have taken "Appreciation" level one.
from where we can get the notes of these lectures?
why cant we do iteration over toppings and get cost? why do we need this?
Firstly loving your videos! So thanks for that
Q. Is this really good to do something like new ExtraCheeze( new ExtraPanner(new FarmHousePizza())))...
B'coz not Basepizza object in ExtraCheese already contains a topping of ExtraPanner....
While if we were not to use Decorator design pattern... We would have had all the toppings on same level... (May be with a boolean flag)
It might matter if we don't want cheese on top of panner but panner and cheese mixed very well... (Sty could not think of a better example)
Can you explain why you used decorator abstract class in between rather than extending base pizza in ExtraCheese and ExtraMushroom classes?
had the same question
Hi, Thanks for the great explanation. One small request could you please share the notes and the code that you are using for the explaination in each video. It would be beneficial.
Noted, will do it from now