Builder Design Pattern in Java

Поділитися
Вставка
  • Опубліковано 1 сер 2024
  • Recommended Book :
    Head First Design Pattern : amzn.to/2pY5xbR
    Builder Design Pattern in Java
    This video contains practical session of Builder Design Pattern.
    Builder design pattern belongs to Creational design pattern which is a type of Design Patterns in java.
    Builder design pattern is a creational design pattern like Factory Pattern and Abstract Factory Pattern.
    Builder pattern builds a complex object using simple objects and uses step by step approach.
    A Builder class builds the final object step by step. This builder is independent of other objects.
    Trainer: Navin Reddy
    Check out our website: www.telusko.com
    Follow Telusko on Twitter: / navinreddy20
    Follow on Facebook:
    Telusko : / teluskolearnings
    Navin Reddy : / navintelusko
    Follow Navin Reddy on Instagram: / navinreddy20
    Subscribe to our other channel:
    Navin Reddy : / @navinreddy
    Telusko Hindi :
    / @teluskohindi
    Subscribe to the channel and learn Programming in easy way.
    Java Tutorial for Beginners : goo.gl/p10QfB
    Scala Tutorials for Java Developers : goo.gl/8H1aE5
    C Tutorial Playlist : goo.gl/8v92pu
    Android Tutorial for Beginners Playlist : goo.gl/MzlIUJ
    XML Tutorial : goo.gl/Eo79do
    Design Patterns in Java : goo.gl/Kd2MWE
    Java Servlet : goo.gl/R5nHp8
    Hibernate Tutorial :goo.gl/N5ONYg
    Spring MVC Tutorial : goo.gl/9ubbG2
    OpenShift Tutorial for Beginners : goo.gl/s58BQH
    Spring Framework with Maven : goo.gl/MaEluO
    Sql Tutorial for Beginners : goo.gl/x3PrTg
    String Handling in Java : goo.gl/zUdPwa
    Array in Java : goo.gl/uXTaUy
    Socket Programming in Java : goo.gl/jlMEbg
    Exception Handling in Java : goo.gl/N4NbAW
    Regards,
    Navin Reddy

КОМЕНТАРІ • 116

  • @SushilKumar-wt7js
    @SushilKumar-wt7js 4 роки тому +4

    I have seen around 6 videos to understand this concept, this is best video which explains this concept in simple and easiest way.......thankssssssssss a lot

  • @venkateswararaodevisetti8684
    @venkateswararaodevisetti8684 5 років тому +13

    My real time example for this is, I have a table and I have a pojo for that table.
    This pojo is getting used in multiple projects
    If a column I'm adding for 1 prj sake I have to change pojo constructor and since we are changing constructor where and all prjs we use this need to be changed or we need to create 2 constructors in pojo
    So this the best solution here is builder design pattern

  • @SagarSagar-ro3fj
    @SagarSagar-ro3fj 5 років тому +4

    While learning selenium on some knowledge of java i got stuck at Actions class and then Action interface reference was created and was used to call the multiple functions in single line..my brain was working in right direction but stuck against obstacle where my knowledge ended up..i got some hint on google about fluent interface.. design pattern..and then telusko was the first place to learn..thanks for enlightenment!

  • @vyshnavramesh9305
    @vyshnavramesh9305 5 років тому +31

    Builder Pattern vs Setters: (My understanding from googling. Feel free to correct if you find it wrong)
    There are classes without setters, called "Immutable Classes". They are used in distributed and multi-threaded programs where multiple threads can alter the states of an object. Developers use 'synchronize' to prevent this.
    But a more convenient approach is to use Immutable classes so that threads can't alter the states via setters.
    (If states need to be altered a new object is created! This consumes memory which is a cons of Immutable Classes
    but its worth, compared to the state-altered-havocs)
    Thus for Immutable Classes, Builder Pattern has to be used instead of setters.

  • @mayanksrkumar16
    @mayanksrkumar16 Рік тому +3

    Amazing! Explained such a complex topic in such a simple way! Thanks a lot!

  • @charlessnachez4248
    @charlessnachez4248 2 роки тому +1

    Thank you man, you got a new subscriber, my teacher couldn't explain this to us, he didn't even mention that this is design pattern.

  • @tirupatirao7521
    @tirupatirao7521 4 роки тому

    your analogy or examples are simply and good to understand

  • @shaliniagarwal8925
    @shaliniagarwal8925 Рік тому +2

    Excellent explanation. I was about to give up on this topic. You explained so clearly - made it so easy !!

  • @codespector1989
    @codespector1989 2 роки тому +1

    finally someone who explained in very simple word , thanks

  • @michelegenchi
    @michelegenchi 7 років тому

    Very easy example; now I understand , thanks... I share your video in my linkedln

  • @palashkhatri7820
    @palashkhatri7820 6 років тому

    Very Nicely Explained , Got the Concept , Thank You

  • @Madhavan2020
    @Madhavan2020 8 років тому +1

    Thanks dude, its awesome simplest example to remember.

  • @EchoVids2u
    @EchoVids2u 4 роки тому

    thanks bro, your tutorials are always so clear and concise

  • @anjalat3016
    @anjalat3016 4 роки тому +5

    Your explanation is very easy to understand Navin. Thanks a lot.Could you please do few videos on other Design Patterns as well.

  • @Fer-jf3pl
    @Fer-jf3pl 4 роки тому +1

    Wow thank you so much. Ur tutorials are always the best

  • @rajivraghunathan9104
    @rajivraghunathan9104 7 років тому

    awesome! simplest ever explanation

  • @saddamjamali9273
    @saddamjamali9273 5 років тому

    Thanks for such clear explanation.

  • @ymfeijo
    @ymfeijo 4 роки тому

    Very clear and tangible explanation!

  • @ayushshukla1597
    @ayushshukla1597 3 роки тому

    Amazing explanation. Thank you.

  • @ThaEquals
    @ThaEquals 8 років тому

    Thank you for this! Very helpful!

  • @savelokhosa6846
    @savelokhosa6846 Рік тому

    You are one of the best Navin

  • @parthpatel3639
    @parthpatel3639 7 років тому

    well Explained....Thank You

  • @milad_mo
    @milad_mo Рік тому

    Thanks for very useful and understandable explanation

  • @tarunseetha
    @tarunseetha 6 років тому

    Many thanks sir for sharing this

  • @munawarabbas1636
    @munawarabbas1636 7 років тому

    great effort Bro.....
    Please CarryON

  • @Corporate_Kida
    @Corporate_Kida Рік тому

    Thankyou so much for making it so simple.👍

  • @dinushachathuranga7657
    @dinushachathuranga7657 Рік тому

    Thanks for excellent explanation❤

  • @nissskygtr
    @nissskygtr 6 років тому

    Excellent Explanation !!!! +1

  • @thestarinthesky_
    @thestarinthesky_ 3 роки тому +4

    You are literally very good at explaining complicated topics by giving simple examples. I have searched the entire online courses out there for weeks and here is the only channel that explains this topic very well. You should make a whole design pattern courses. I would pay for that.

    • @BadCode_22
      @BadCode_22 3 роки тому

      Agree with this comment

  • @SantoshKumar-wh7gb
    @SantoshKumar-wh7gb 8 років тому

    awesome example

  • @bharathys7165
    @bharathys7165 8 років тому

    Thanks a ton.. !!!

  • @leetcodebaby6680
    @leetcodebaby6680 5 років тому

    Loved it, truly amazing ! Thanks !

  • @VipinRawat_Offcial
    @VipinRawat_Offcial 2 роки тому

    You made design patterns so easy

  • @suchitrasrinivas4330
    @suchitrasrinivas4330 Рік тому

    Thank you sir, Very nice explanation.,

  • @movieclimax9328
    @movieclimax9328 6 років тому

    great job..thanks

  • @Sumitmaurya070
    @Sumitmaurya070 3 роки тому

    wow sir, i couldnt answer it in mnc interview, now i will not do mistake again due to this vdo

  • @niharikakumar1533
    @niharikakumar1533 10 місяців тому

    Great sir 😊

  • @kbhardwaj1989
    @kbhardwaj1989 5 років тому

    very beautifully explained. Thanks for sharing knowledge.

  • @saurabhshukla4900
    @saurabhshukla4900 4 роки тому +1

    Nice and clear example. But builder need not be instantitated everytime. So we can make the builder static.

  • @unemployedcse3514
    @unemployedcse3514 3 місяці тому

    awesome , luv u brother ❤

  • @gunasekar925
    @gunasekar925 2 роки тому

    awesome sir

  • @viswanathnuggu
    @viswanathnuggu 8 років тому

    Thanks, it is helpful!
    So, here in this example Phone class will have only getters and no setters?

  • @rahulkaranjavkar7994
    @rahulkaranjavkar7994 5 років тому

    Thanks sir...

  • @user-bc2pv2gc4p
    @user-bc2pv2gc4p Рік тому

    Thank you.

  • @raghavilatha
    @raghavilatha 4 роки тому

    Thankyou for your explanation, can you please add remaining design patterns also ?

  • @ashishstunner
    @ashishstunner 4 роки тому

    simple but effective.

  • @lux27.42
    @lux27.42 5 років тому +4

    da*n, this tutorial seriously easy to understand!! thankyou Mr.Alien..!!

  • @spencerdepas4235
    @spencerdepas4235 7 років тому

    Nice video.

  • @ehsanhosseini5861
    @ehsanhosseini5861 4 роки тому +1

    Hi Telusko, Your explanation is really clear with understandable examples. Thank you. I have an interview soon, I wanted to know which design patterns are most important to know for my interview?

  • @albindavis3538
    @albindavis3538 Рік тому

    superb

  • @isoplayers
    @isoplayers 5 років тому

    Excellent

  • @mohammedviso2269
    @mohammedviso2269 8 років тому

    Thanks

  • @goatmatata2798
    @goatmatata2798 4 роки тому

    thanxx

  • @sachindixit6605
    @sachindixit6605 6 років тому +4

    Hi Navin, It's a great video, but my question is that, as per your example, what is the need of phone builder, the same can be done with phone class itself, having default constructor and all setter method. Can you please explain.

    • @saurabhkumar-kh7oz
      @saurabhkumar-kh7oz 6 років тому +8

      Having setters prevents you from ever making your class immutable i.e the value of its parameters cannot change. Also there is no guarantee that an object is stable after a setter method i.e it is possible that an object requires at least 3 parameters to function but your object would still exist even after just 1 setter call. You can ensure that all the required parameters are set when u call the getPhone() or build() method, you can even set some of the parameters as final since you are basically calling the constructor to the class making it immutable. Also it is less verbose than having many setters.

  • @gdIndia199
    @gdIndia199 2 роки тому

    Great

  • @surya5064
    @surya5064 3 роки тому

    How I understood this builder pattern is => for example in your eCommerce application if we search laptop it will show so many results but by using the filter option if u set the ram> 4GB then it will give all the laptops which ur having more than 4 GB ram irrespective of the company.

  • @JavaAll754
    @JavaAll754 4 роки тому

    Is this another way of implementing constructor overloading?

  • @anitahcu
    @anitahcu 3 роки тому

    thanks

  • @rasnarahman3058
    @rasnarahman3058 6 років тому

    nice

  • @enesog
    @enesog 7 років тому

    You can use mulltiple conctructors.This will do the same,no ?

  • @ReihaneZekri
    @ReihaneZekri 7 років тому +6

    Great explanation! just one question: why do we need a separate class for Builder pattern? isn't it ok to use the same entity class?

    • @saravananm2280
      @saravananm2280 4 роки тому +15

      1)WHY BUILDER DESIGN?
      The builder design pattern provides a way for us to build complex immutable objects .
      Immutable objects are those whose attributes can't be changed (they are 'final') which means there is no setters .
      2)WHAT IS THE NEED OF CREATING SEPARATE CLASS ?
      If you put all the methods of PhoneBuilder class in the phone class,that means you are putting all the setters in the Phone class itself .
      NOTE: Here the class is not a immutable class anymore,Since we added Setters method in Phone class
      And also you will end up creating Object for the phone class directly in the main() , try to prevent this kind of behaviour , only let a mutable class(PhoneBuilder in this case ) create and return the object of Phone .

    • @chaitanyajada5430
      @chaitanyajada5430 2 роки тому

      @@saravananm2280 I think without creating a separate class and by using builder class as Innerclass of object and passing builder as input to the object constructor and creating phone object in getPhone method will solve I think, In this way we can avoid creating separate class

  • @200564612434
    @200564612434 4 роки тому

    @Telusko .... what if i want to pass those values dynamically to the builder class ??? how can i do that ??

  • @gigajoules6636
    @gigajoules6636 4 роки тому

    Must have missed something here. I assume to set default values we just state them where we declare the variables the object is made up of?

  • @shadab5azhar
    @shadab5azhar 5 років тому

    where I will get other videos of design Pattern

  • @aishwaryasrivastava6526
    @aishwaryasrivastava6526 4 роки тому

    please add command design pattern and other design patterns too. thanks

  • @vasudevparmar8812
    @vasudevparmar8812 2 роки тому +1

    using Interface this could be done:-
    public interface Phone {
    Phone setOs(String os);
    Phone setBattery(int val);
    Phone SetScreensize(int size);
    Phone setProcessor(String processor);
    Phone setRam(int ram);
    Phone getPhone();
    }
    public class PhoneBuilder implements Phone{
    private String os;
    private int Battery;
    private int size;
    private String processor;
    private int ram;
    @Override
    public Phone setOs(String os) {
    this.os=os;
    return this;
    }
    @Override
    public Phone setBattery(int val) {
    Battery=val;
    return this;
    }
    @Override
    public Phone SetScreensize(int size) {
    this.size=size;
    return this;
    }
    @Override
    public Phone setProcessor(String processor) {
    this.processor=processor;
    return this;
    }
    @Override
    public Phone setRam(int ram) {
    this.ram=ram;
    return this;
    }
    public Phone getPhone()
    {
    return this;
    }
    public String toString(){
    return "Mobile details [ os: "+os+", battery: "+Battery+", screensize: "+size+", processor: "+processor+", ram: "+ram+" ]";
    }
    }
    public class client {
    public static void main(String[] args) {
    Phone p1=new PhoneBuilder().setBattery(3000).setOs("Android").setRam(4).getPhone();
    System.out.println(p1);
    Phone p2=new PhoneBuilder().SetScreensize(12).setBattery(3000).setOs("ios").setRam(8).getPhone();
    System.out.println(p2);
    }
    }

  • @anasabdeljalil9883
    @anasabdeljalil9883 3 роки тому

    Good video , but I have a question, what's the need of Phone class after we create phone builder ?! , we can override a toString method in PhoneBulider class and do not use Phone object .

  • @sahillamba3879
    @sahillamba3879 4 роки тому

    How printing the object gave the values of the Phone attributes? It should not right?

  • @yellowlegend245
    @yellowlegend245 5 років тому

    Hi Navin, why are you having same variables in both classes Phone and PhoneBuilder. (Not sure if you noticed). In real world we dont duplicate the data.

  • @brotherandsister9203
    @brotherandsister9203 11 місяців тому

    Done...

  • @travel_bloggerr
    @travel_bloggerr Рік тому

    I didnt get the correct use of builder design patter by adding additional class PhoneBuilder we can also use getter and setter i Phone class itself and use any setter method whichever value its present it will set?
    Please help to resolve this issue?

  • @ritikas383
    @ritikas383 5 років тому

    Why to use Super keyword here? when already this will refer to current class's object?

  • @ronyut1984
    @ronyut1984 5 років тому

    Why do all the setters return PhoneBuilder and not void?

  • @pukka4140
    @pukka4140 4 роки тому

    Hello Telusko,
    Since Phone p=new PhoneBuilder().setOS............... at @7:36
    2 questions
    1. reference var p is going to point 2 objects in heap a new PhoneBuilder() object and new Phone() object?
    2. Can we define Phone class instead as an interface and then have PhoneBuilder implements it? That way, no one can create a new instance of an interface?
    But that wouldn't make sense since we actually need to create Phone() instance but want it to be created by builder class right? So how can we avoid someone creating direct instance of Phone class?

  • @srishamarathe2595
    @srishamarathe2595 4 роки тому

    I don't understand the dislikes LOL, thanx for the video sir, deeply appreciate it.

  • @fazaljarral2792
    @fazaljarral2792 4 роки тому

    What is different from setters?
    We could do it with default constructor , then set each value? How is this different?

    • @saurabhshukla4900
      @saurabhshukla4900 4 роки тому +1

      Point is you have to make the object immutable. You should not be able to change its value later on. So you cannot expose setters

  • @anonymous_devil3730
    @anonymous_devil3730 Рік тому

    Why not use a non parameterized constructor in Phone class and use setters and getters in main method to pass value. In enterprise application, where we have 20-25 properties in one class and each class internally has 20-30 properties, I don't think this design pattern will work. So is it of any use in enterprise applications??

  • @ronakpurohit750
    @ronakpurohit750 Рік тому

    what is the the participants in this program and class diagram

  • @GauravSingh-ov9mh
    @GauravSingh-ov9mh 6 років тому

    What if we need to create a immutable object using builder pattern? Because in this example one of the set method can be called after the object creation and hence can change the state of the object.
    something like this p.setProcessor() ;

    • @saurabhkumar-kh7oz
      @saurabhkumar-kh7oz 6 років тому

      we can set the parameters in the acutal Phone class as final making it immutable.

    • @____ayush____
      @____ayush____ 9 місяців тому

      @@GauravSingh-ov9mh I believe the state of the object wont be changed after object creation.
      If we call the any of the set method on phonebuilder object, only that phonebuilder object's value will be changed, not of the phone object.
      Do try to run this query.

  • @shivakrishna3069
    @shivakrishna3069 9 місяців тому

    How toString() method is called ?

  • @manjunathkotagi4874
    @manjunathkotagi4874 Рік тому

    Why u r returning this from each setter..? we can create PhoneBuilder builder = new PhoneBuilder(); and use builder.setXXX(); at the end we will be having phone. this is can be done just using simple setters right? how ur example benefits?

  • @manindersingh6371
    @manindersingh6371 2 роки тому

    Hello Sir,
    Thanks for making the video. I have one question regarding this.
    We can make one parameter constructor to get the one value like you are doing. Suppose we need to set the price of phone so we can just create a constructor which take price as a parameter and set it. Why we are using the design pattern in this concept?

    • @thecodeagency2307
      @thecodeagency2307 2 роки тому +1

      In our case we had just five parameters, so we can create different constructors with varying parameters like first constructor with 5 parameters, second constructor with 4 parameters, like that. But, what if you have large number of parameters it will be so tough to create constructor telescopes. That's why we are using builder patterns.

    • @manindersingh6371
      @manindersingh6371 2 роки тому

      @@thecodeagency2307 Thank you :)

  • @dineshkinibailoor340
    @dineshkinibailoor340 7 років тому

    why it is showing processor=null, better approach is to provide standard value using default value constructor

  • @lokesh398
    @lokesh398 4 роки тому

    Can anyone help for me it showing type mismatch when trying to put
    Phone p = new phonebuilder().setOs("android");

    • @200564612434
      @200564612434 4 роки тому +1

      instead of
      Phone p = new phonebuilder().setOs("android");
      you should write it like this
      Phone p = new phonebuilder().setOs("android").getPhone();
      because "p" is a Phone type variable and you are storing a PhoneBuilder object in it thats why it is showing the error

  • @manohargandham1353
    @manohargandham1353 6 років тому +2

    what is the advantage of having a builder over having setters in Phone class ?

    • @skullwise
      @skullwise 6 років тому

      Good question. If you come across the answer to your question, please let me know.

    • @skullwise
      @skullwise 6 років тому +1

      Thanks for your response. But I can achieve the same effect by using an empty constructor(Phone phone = new Phone();). Then I can use "setters" to set the required variables, right?

    • @Keyakina
      @Keyakina 6 років тому

      yeah same thought! thats also exactly what he's doing.. i see no point in using this pattern

    • @skullwise
      @skullwise 6 років тому +2

      One difference by using builder partner over setters is that Builder pattern creates immutable classes while using setters create mutable classes. But this can not be seen as an advantage in all scenarios.

    • @risteardob2095
      @risteardob2095 6 років тому

      The problem is that the explanation of the Builder pattern is not correct. The Director is missing. When you have a Director, who calls the Builder then the client becomes decoupled from the Builder. The goal of the Builder pattern is to simplify creating complex objects. When you don't have a Director it's not really that simple for the client since they need to call all of the setter methods, when you introduce the Director that is not the case. You need to look at the GoF explanation of the Builder pattern.

  • @vyshnavramesh9305
    @vyshnavramesh9305 5 років тому

    @Telusko you should have explained the advantage of Builder Pattern over setters with no-arg constructor. What's the point in such a video if all the viewers are getting confused after watching it? Have been enjoying your videos fora long time, but not anymore. This is how a product/company loose customers. You could have at least gone through the comments.

  • @pravendrayadav6200
    @pravendrayadav6200 2 роки тому

    Are we creating 2 objects here for creating just One?
    1. When calling new PhoneBuilder() in Main class.
    2. When calling new Phone() in PhoneBuilder class.

  • @souravkumar1608
    @souravkumar1608 6 місяців тому

    Any way, we see here two classes Phone and Phonebuilder containing same entities to avoid redundancy.

  • @edgarasstasiukaitis3062
    @edgarasstasiukaitis3062 4 роки тому

    Really don't get this why we do so...Isn't it the same as we initial object with default constructor and just use setters to set values for some attributes? Where is benefits for creating Builder class?

  • @mdsaquibansari4123
    @mdsaquibansari4123 10 місяців тому

    your 8 min video carry more weight than rest present in youtube

  • @MrAdy0207
    @MrAdy0207 7 років тому

    I would suggest using Intellij

  • @dipak002
    @dipak002 5 років тому +1

    Welcome back "Aliens", did you called us "Aliens"!!?? and why is that 🤔🤔

    • @venkateshkarunakaran2212
      @venkateshkarunakaran2212 5 років тому

      because he doesn't know us , and when someone isn't known to you , you call them alien.

  • @UmairAli
    @UmairAli 4 роки тому

    is anyone else getting errors in code or is it just me?

  • @sarojsahoo8763
    @sarojsahoo8763 4 роки тому

    This is not how Builder Design Pattern works . It should behave like immutable class . We should not provide setter.

    • @vishnunairv4u
      @vishnunairv4u 3 роки тому

      there is no setters in the phone class. The builder is doing the stuff :)

  • @bostonlights2749
    @bostonlights2749 4 роки тому

    :)

  • @abhineetsingh6720
    @abhineetsingh6720 Рік тому

    👽👽👽👽👽👽👽👽👽👽

  • @vyshnavramesh9305
    @vyshnavramesh9305 5 років тому +1

    @Telusko you should have explained the advantage of Builder Pattern over setters with no-arg constructor. What's the point in such a video if all the viewers are getting confused after watching it? Have been enjoying your videos fora long time, but not anymore. This is how a product/company loose customers. You could have at least gone through the comments.