This shows you the differences between two versions of the page.
poo:breviare:breviar-13 [2021/01/17 18:50] carmen.odubasteanu [Prezentare generala] |
poo:breviare:breviar-13 [2021/01/17 19:34] (current) carmen.odubasteanu [Builder] |
||
---|---|---|---|
Line 30: | Line 30: | ||
==== Builder ==== | ==== Builder ==== | ||
- | {{ :poo:breviare:img1.jpg?600 |}} | + | Acest pattern este folosit în restaurantele de tip fast food care furnizeaza meniul pentru copii. Un meniu pentru copii consta de obicei într-un fel principal, unul secundar, o bautura si o jucarie. Pot exista variatii în ceea ce privește conținutul mediului, dar procesul de creare este acelasi. Fie ca la felul principal se alege un hamburger sau un cheesburger procesul va fi același. Vânzatorul le va indica celor din spate ce sa puna pentru fiecare fel de mâncare, pentru bautura si jucarie. Toate acestea vor fi puse într-o punga si servite clientilor. |
- | ''CipherOutputStream cos = new CipherOutputStream(new FileOutputStream( "file" ) , c );'' | ||
- | ''PrintWriter pw = new PrintWriter (new OutputStreamWriter ( cos ) );'' | + | {{:poo:breviare:img.jpg?400|}} |
- | + | ||
- | ''pw.println ( "Stand and unfold yourself" );'' | + | |
- | + | ||
- | ''pw.close( );'' | + | |
- | + | ||
- | + | ||
- | Figure 1: | + | |
- | input stream | + | |
- | + | ||
- | Figure 2: | + | |
- | output stream | + | |
+ | |||
+ | Acest sablon realizeaza separarea constructiei de obiecte complexe de reprezentarea lor astfel încât acelasi proces sa poata crea diferite reprezentari. Builder-ul creeaza parti ale obiectului complex de fiecare data când este apelat si retine toate starile intermediare. Când departamentul este terminat, clientul primeste rezultatul de la builder. În acest mod, se obtine un control mai mare asupra procesului de constructie de noi obiecte. | ||
+ | Spre deosebire de alte pattern-uri, din categoria creational, care creau produsele într-un singur pas, pattern-ul Builder construieste un produs pas cu pas la comanda coordonatorului. În cadrul acestei aplicatii, pattern-ul este folosit pentru a instantia departamentele. Pentru a întelege cum ar trebui folosit acest pattern, puteti urmari exemplul de mai jos. | ||
+ | <code java> | ||
+ | public class User { | ||
+ | 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 | ||
+ | private User(UserBuilder builder) { | ||
+ | this.firstName = builder.firstName; | ||
+ | this.lastName = builder.lastName; | ||
+ | this.age = builder.age; | ||
+ | this.phone = builder.phone; | ||
+ | this.address = builder.address; | ||
+ | } | ||
+ | public String getFirstName() { | ||
+ | return firstName; | ||
+ | } | ||
+ | public String getLastName() { | ||
+ | return lastName; | ||
+ | } | ||
+ | public int getAge() { | ||
+ | return age; | ||
+ | } | ||
+ | public String getPhone() { | ||
+ | return phone; | ||
+ | } | ||
+ | public String getAddress() { | ||
+ | return address; | ||
+ | } | ||
+ | public String toString() { | ||
+ | return "User:"+this.firstName+" "+this.lastName+" "+this.age+" "+this.phone+" " + this.address; | ||
+ | } | ||
+ | public static class UserBuilder { | ||
+ | private final String firstName; | ||
+ | private final String lastName; | ||
+ | private int age; | ||
+ | private String phone; | ||
+ | private String address; | ||
+ | public UserBuilder(String firstName, String lastName) { | ||
+ | this.firstName = firstName; | ||
+ | this.lastName = lastName; | ||
+ | } | ||
+ | public UserBuilder age(int age) { | ||
+ | this.age = age; | ||
+ | return this; | ||
+ | } | ||
+ | public UserBuilder phone(String phone) { | ||
+ | this.phone = phone; | ||
+ | return this; | ||
+ | } | ||
+ | | ||
+ | public UserBuilder address(String address) { | ||
+ | this.address = address; | ||
+ | return this; | ||
+ | } | ||
+ | public User build() { | ||
+ | return new User(this); | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | public static void main(String[] args) { | ||
+ | User user1 = new User.UserBuilder("Lokesh", "Gupta") | ||
+ | .age(30) | ||
+ | .phone("1234567") | ||
+ | .address("Fake address 1234") | ||
+ | .build(); | ||
+ | User user2 = new User.UserBuilder("Jack", "Reacher") | ||
+ | .age(40) | ||
+ | .phone("5655") | ||
+ | //no address | ||
+ | .build(); | ||
+ | } | ||
+ | } | ||
+ | </code> |