SlideShare a Scribd company logo
(software) design pattern
Builder Pattern
Contoh penerapan software design pattern
pada pemrograman aplikasi Android
Arif Akbarul Huda
●
Android Developer di qiscus
●
Penulis buku “Livecoding! 9 Aplikasi
Android Buatan Sendiri”
●
omayib@gmail.com (email) | @omayib
(Twitter)
Isu...
Bagaimana teknik menangani objek personal
yang dibuat berdasarkan formulir seperti
gambar ini?
public class Person {
private final String firstName; //required
private final String lastName; //required
private final int age; //optional
private final String phone; //optional
private final String address; //optional
//and many more optional variable…….
}
● Bayangkan seandainya, class yang kamu buat memiliki banyak atribut/variabel
● Beberapa variabel diantaranya wajib diisi dan sisanya optional
Studi kasus….
Bagaimana cara menginisiasi objek
Person?
public Person(String firstName, String lastName) {
this(firstName, lastName, 0);
}
public Person(String firstName, String lastName, int age) {
this(firstName, lastName, age, '');
}
public Person(String firstName, String lastName, int age, String phone)
{
this(firstName, lastName, age, phone, '');
}
public Person(String firstName, String lastName, int age, String phone,
String address) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.phone = phone;
this.address = address;
}
Membuat beberapa constructor….
Its work!, namun (nampak) membingungkan jika dilihat dari sisi client….
● Constructor yang mana yang harus dipilih?
● Cunstructor dengan 2 parameter atau 3 parameter?
● Apa isi default-value dari variabel yang tidak di-pass nilainya?
● Bagaimana jika ingin memberikan nilai pada variabel address, tapi tidak menganggu
variabel age dan phone?
● Kadang Bingung urutannya. Parameter String pertama merupakan phone atau
address?
● Apabila software berkembang, variabel bertambah banyak, maka constructor juga
Semakin bertambah. Lalu…. Bingung!?!!!
Arrrgggghhhh….. pucing pala berbi
Solution...
Aha… gunakan saja JavaBeans convention…
● No argument didalam constructor
● Setiap atribut/variabel punya setter & getter
public class Person {
private String firstName; // required
private String lastName; // required
private int age; // optional
private String phone; // optional
private String address; //optional
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
● Pendekatan ini paling mudah dilakukan , mudah
dibaca dan mudah di kelola.
● Client cukup menginisiasi sebuah object tanpa
melwatkan argument apapun kedalam
consturctor.
● Masing-masing variabel, nilainya diberikan
melalui setter.
Coba perhatikan dgn seksama,
apakah kamu menemukan
ke-aneh-an?
Setter-getter issue
● Status objek menjadi tidak konsisten
● Person Class menjadi mutable. Bisa diubah
sewaktu-waktu.
● Kita akan kehilangan kelebihan-kelebihan dari
immutable objek
Classes should be immutable unless there's a very good reason to
make them mutable....If a class cannot be made immutable, limit its
mutability as much as possible. by Joshua Bloch (taken from the book
Effective Java)
Classes should be immutable unless there's a very good reason to
make them mutable....If a class cannot be made immutable, limit its
mutability as much as possible. by Joshua Bloch (taken from the book
Effective Java)
Next solution
using builder pattern
Tujuan builder pattern
Mengurangi kompleksitas berkaitan dengan hal berikut
● Constructor berlebihan (lebih dari 1)
● Banyak variabel
● Meminimalkan penggunaan setter
public class Person {
private String firstName;//required
private String address;//required
private String phone;//required
private String salary; //optional
// .... others optional variable
private String job;//optional
private Person(Builder b){
this.firstName=b.firstName;
this.address=b.address;
this.phone=b.phone;
this.salary=b.salary;
this.job=b.job;
}
public String getFirstName() {return firstName;}
public String getAddress() {return address;}
public String getPhone() {return phone;}
public String getJob() {return job;}
public String getSalary() {return salary;}
public static class Builder{}
}
public static class Builder{
private String firstName;//required
private String address;//required
private String phone;//required
private String salary; //optional
// .... others optional variable
private String job;//optional
public Builder firstName(String firstNamePerson){
this.firstName=firstNamePerson;
return this;
}
public Builder address(String addressPerson){
this.address=addressPerson;
return this;
}
public Builder phone(String phonePerson){
this.phone=phonePerson;
return this;
}
public Builder salary(String salaryPerson){
this.salary=salaryPerson;
return this;
}
public Builder job(String jobPerson){
this.job=jobPerson;
return this;
}
public Person build(){
Person person= new Person(this);
if(person.firstName==null){
throw new IllegalStateException("first name can not be empty");
}
if(person.address==null){
throw new IllegalStateException("address can not be empty");
}
if(person.phone==null){
throw new IllegalStateException("phone can not be empty");
}
return person;
}
}
Bagaimana cara menginisiasi objek Person?
Person person=new Person.Builder().address("alamat")
.birthDay("12/2/1990")
.birthPlace("solo")
.bodyHeight(120)
.bodyWedight(70)
.job("pekerjaan")
.lastName("huda")
.middleName("midle name")
.phone("2232323")
.firstName("ariff")
.salary("23000000000").build();
menggunakan builder pattern :
●
Tipe constructor adalah private, sehingga class tidak bisa di inisiasi secara langsung dari
sisi client
●
Class bersifat immutable, kita hanya perlu menyediakan getter.
● Builder menggunakan style Fluent interface, sehingga mudah dibaca
● Mudah dilakukan validasi utnuk membedakan atribut wajib dan optional.
Keunggulannya….
sourcode
Tersedia di Github
(https://github.com/omayib/BuilderPatterOnAndroid)

More Related Content

Viewers also liked (12)

PDF
introduction to programmer career path
Arif Huda
 
PDF
android design pattern
Lucas Xu
 
PPTX
Design pattern
Omar Isaid
 
PPT
Application Of Software Design Pattern
guest46da5428
 
PPTX
Design Pattern in Software Engineering
Manish Kumar
 
PPTX
Acrhitecture deisign pattern_MVC_MVP_MVVM
Dong-Ho Lee
 
PPTX
Observer Software Design Pattern
Nirthika Rajendran
 
PDF
Creational Design Patterns
Jamie (Taka) Wang
 
PPTX
Design pattern - Software Engineering
Nadimozzaman Pappo
 
PDF
Design Pattern Explained CH1
Jamie (Taka) Wang
 
PDF
Reactive Design Patterns: a talk by Typesafe's Dr. Roland Kuhn
Zalando Technology
 
PPT
Design pattern in android
Jay Kumarr
 
introduction to programmer career path
Arif Huda
 
android design pattern
Lucas Xu
 
Design pattern
Omar Isaid
 
Application Of Software Design Pattern
guest46da5428
 
Design Pattern in Software Engineering
Manish Kumar
 
Acrhitecture deisign pattern_MVC_MVP_MVVM
Dong-Ho Lee
 
Observer Software Design Pattern
Nirthika Rajendran
 
Creational Design Patterns
Jamie (Taka) Wang
 
Design pattern - Software Engineering
Nadimozzaman Pappo
 
Design Pattern Explained CH1
Jamie (Taka) Wang
 
Reactive Design Patterns: a talk by Typesafe's Dr. Roland Kuhn
Zalando Technology
 
Design pattern in android
Jay Kumarr
 

More from Arif Huda (20)

PDF
Spotify Recommender System
Arif Huda
 
PPTX
Startup Tanpa Mentor, Bisa?
Arif Huda
 
PDF
Introducing Startup 101
Arif Huda
 
PDF
Solusi Mencegah Coding Ruwet
Arif Huda
 
PDF
Bedah Teknologi Semacam Gojek
Arif Huda
 
PDF
Rahasia Mendapatkan Investasi Milyaran Rupiah Sebelum Usia 30 Tahun
Arif Huda
 
PPTX
Membuat Media Edukasi Daring
Arif Huda
 
PDF
Single responsibility pattern
Arif Huda
 
PDF
5 jalan rahasia mewujudkan ide startup
Arif Huda
 
ODP
programmersworld
Arif Huda
 
PDF
5 Langkah Jitu Melejitkan Ide Bisnis Startup
Arif Huda
 
ODP
getting started startup in millenial era
Arif Huda
 
PPTX
Fingertip Detection
Arif Huda
 
PDF
Protocol oriented programming
Arif Huda
 
ODP
an implementation of repository pattern for mobile application
Arif Huda
 
ODP
Inovasi Teknologi Berkemajuan
Arif Huda
 
ODP
Git workflow
Arif Huda
 
PDF
Media pembelajaran audio untuk tunanetra
Arif Huda
 
ODP
Tobe a superstar programmer
Arif Huda
 
ODP
clean code for high quality software
Arif Huda
 
Spotify Recommender System
Arif Huda
 
Startup Tanpa Mentor, Bisa?
Arif Huda
 
Introducing Startup 101
Arif Huda
 
Solusi Mencegah Coding Ruwet
Arif Huda
 
Bedah Teknologi Semacam Gojek
Arif Huda
 
Rahasia Mendapatkan Investasi Milyaran Rupiah Sebelum Usia 30 Tahun
Arif Huda
 
Membuat Media Edukasi Daring
Arif Huda
 
Single responsibility pattern
Arif Huda
 
5 jalan rahasia mewujudkan ide startup
Arif Huda
 
programmersworld
Arif Huda
 
5 Langkah Jitu Melejitkan Ide Bisnis Startup
Arif Huda
 
getting started startup in millenial era
Arif Huda
 
Fingertip Detection
Arif Huda
 
Protocol oriented programming
Arif Huda
 
an implementation of repository pattern for mobile application
Arif Huda
 
Inovasi Teknologi Berkemajuan
Arif Huda
 
Git workflow
Arif Huda
 
Media pembelajaran audio untuk tunanetra
Arif Huda
 
Tobe a superstar programmer
Arif Huda
 
clean code for high quality software
Arif Huda
 
Ad

Recently uploaded (20)

PDF
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
PDF
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
PPTX
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
PPTX
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
PPTX
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
PDF
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
PDF
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
PDF
How to Hire AI Developers_ Step-by-Step Guide in 2025.pdf
DianApps Technologies
 
PDF
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PPTX
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PPTX
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
PDF
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
PDF
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
PPTX
Transforming Mining & Engineering Operations with Odoo ERP | Streamline Proje...
SatishKumar2651
 
PDF
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
PPTX
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
How to Hire AI Developers_ Step-by-Step Guide in 2025.pdf
DianApps Technologies
 
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
Transforming Mining & Engineering Operations with Odoo ERP | Streamline Proje...
SatishKumar2651
 
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Ad

Android (software) Design Pattern

  • 1. (software) design pattern Builder Pattern Contoh penerapan software design pattern pada pemrograman aplikasi Android
  • 2. Arif Akbarul Huda ● Android Developer di qiscus ● Penulis buku “Livecoding! 9 Aplikasi Android Buatan Sendiri” ● [email protected] (email) | @omayib (Twitter)
  • 4. Bagaimana teknik menangani objek personal yang dibuat berdasarkan formulir seperti gambar ini?
  • 5. public class Person { private final String firstName; //required private final String lastName; //required private final int age; //optional private final String phone; //optional private final String address; //optional //and many more optional variable……. } ● Bayangkan seandainya, class yang kamu buat memiliki banyak atribut/variabel ● Beberapa variabel diantaranya wajib diisi dan sisanya optional Studi kasus….
  • 7. public Person(String firstName, String lastName) { this(firstName, lastName, 0); } public Person(String firstName, String lastName, int age) { this(firstName, lastName, age, ''); } public Person(String firstName, String lastName, int age, String phone) { this(firstName, lastName, age, phone, ''); } public Person(String firstName, String lastName, int age, String phone, String address) { this.firstName = firstName; this.lastName = lastName; this.age = age; this.phone = phone; this.address = address; } Membuat beberapa constructor….
  • 8. Its work!, namun (nampak) membingungkan jika dilihat dari sisi client…. ● Constructor yang mana yang harus dipilih? ● Cunstructor dengan 2 parameter atau 3 parameter? ● Apa isi default-value dari variabel yang tidak di-pass nilainya? ● Bagaimana jika ingin memberikan nilai pada variabel address, tapi tidak menganggu variabel age dan phone? ● Kadang Bingung urutannya. Parameter String pertama merupakan phone atau address? ● Apabila software berkembang, variabel bertambah banyak, maka constructor juga Semakin bertambah. Lalu…. Bingung!?!!!
  • 10. Solution... Aha… gunakan saja JavaBeans convention… ● No argument didalam constructor ● Setiap atribut/variabel punya setter & getter
  • 11. public class Person { private String firstName; // required private String lastName; // required private int age; // optional private String phone; // optional private String address; //optional public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } } ● Pendekatan ini paling mudah dilakukan , mudah dibaca dan mudah di kelola. ● Client cukup menginisiasi sebuah object tanpa melwatkan argument apapun kedalam consturctor. ● Masing-masing variabel, nilainya diberikan melalui setter. Coba perhatikan dgn seksama, apakah kamu menemukan ke-aneh-an?
  • 12. Setter-getter issue ● Status objek menjadi tidak konsisten ● Person Class menjadi mutable. Bisa diubah sewaktu-waktu. ● Kita akan kehilangan kelebihan-kelebihan dari immutable objek Classes should be immutable unless there's a very good reason to make them mutable....If a class cannot be made immutable, limit its mutability as much as possible. by Joshua Bloch (taken from the book Effective Java) Classes should be immutable unless there's a very good reason to make them mutable....If a class cannot be made immutable, limit its mutability as much as possible. by Joshua Bloch (taken from the book Effective Java)
  • 14. Tujuan builder pattern Mengurangi kompleksitas berkaitan dengan hal berikut ● Constructor berlebihan (lebih dari 1) ● Banyak variabel ● Meminimalkan penggunaan setter
  • 15. public class Person { private String firstName;//required private String address;//required private String phone;//required private String salary; //optional // .... others optional variable private String job;//optional private Person(Builder b){ this.firstName=b.firstName; this.address=b.address; this.phone=b.phone; this.salary=b.salary; this.job=b.job; } public String getFirstName() {return firstName;} public String getAddress() {return address;} public String getPhone() {return phone;} public String getJob() {return job;} public String getSalary() {return salary;} public static class Builder{} } public static class Builder{ private String firstName;//required private String address;//required private String phone;//required private String salary; //optional // .... others optional variable private String job;//optional public Builder firstName(String firstNamePerson){ this.firstName=firstNamePerson; return this; } public Builder address(String addressPerson){ this.address=addressPerson; return this; } public Builder phone(String phonePerson){ this.phone=phonePerson; return this; } public Builder salary(String salaryPerson){ this.salary=salaryPerson; return this; } public Builder job(String jobPerson){ this.job=jobPerson; return this; } public Person build(){ Person person= new Person(this); if(person.firstName==null){ throw new IllegalStateException("first name can not be empty"); } if(person.address==null){ throw new IllegalStateException("address can not be empty"); } if(person.phone==null){ throw new IllegalStateException("phone can not be empty"); } return person; } }
  • 18. menggunakan builder pattern : ● Tipe constructor adalah private, sehingga class tidak bisa di inisiasi secara langsung dari sisi client ● Class bersifat immutable, kita hanya perlu menyediakan getter. ● Builder menggunakan style Fluent interface, sehingga mudah dibaca ● Mudah dilakukan validasi utnuk membedakan atribut wajib dan optional. Keunggulannya….