Энэ нэрийг хараад зарим хүмүүс огт сонсоогүй байж болно. Нэрийг нь мэдэхгүй ч бүх программистуудын өдөр тутамдаа хэрэглэдэг паттерн.
Доорх кодыг харна уу.

Ger(int hana) { … }
Ger(int hana, int burees) { … }
Ger(int hana, int burees, boolean shallasan) { … }
Ger(int hana, int burees, boolean shallasan, boolean ereelsen) { … }

Үүнд Гэр гэсэн объектыг үүсгэж байна. Гэр барихад хэдэн ханатай байх нь эхлээд зайлшгүй тогтоосон байх ёстой зүйл. Та бидний өдөр тутам хэрэглэдэг гэрүүд 5 ханатай байдаг тул hana параметерын өгөгдмөл буюу Default утгыг 5 гэж авч болно.
Гэрийн дээвэр нь ихэнхдээ 2 давхар бүрээстэй байдаг ч 1-с эхлээд хэдэн ч давхар бүрээстэй байж болно. Гэр шалтай ч байж болно, шалгүй ч байж болно. Зуны гэр шалгүй байх нь элбэг. Тиймээс шалласан(shallasan) эсэх параметрийг бүүлийн төрөлтэй авав. Ereelsen гэсэн параметер нь гэрийг эрээлсэн эсэхийг заана. (Гэрийн тооно, унь, хана нь дотроо баахан хээ угалз болоод явчихсан ч бий. Дан будагтай эсвэл огт будаггүй ч бий.)
Энэ мэт янз бүрийн обьект үүсгэхэд бид дээрх маягаар параметерүүдийг нь өгөөд үүсгээд явдаг. Үүнийг л програм хангамжийн архитектурчид Telescoping constructor pattern гэж нэрлэдэг.
Гэхдээ тухайн обьект хэр төвөгтэйгээс хамаараад дамжуулах параметерүүд нь бүр ихсээд 10, 20 болоод явчих нь ч бий. Тэр үед программист та хэд дэх дээр нь ямар параметер дамжуулж байгаагаа мартаж санаад ирнэ. Энэ үед Builder pattern жинхэнэ тохирно. Энэ л асуудлыг шийдэх гэж угаасаа Builder паттерн үүссэн билээ. ПХА (Програм Хангамжийн Архитектур) хичээл дээр суусан хүүхдүүд бүгд мэдэж байх ёстой.

public class Ger{
private int hana;
private int burees;
private boolean shallasan;
private boolean ereelsen;

public static class Builder {
//required
private final int hana;
//optional
private int burees = false;
private boolean shallasan = false;
private boolean ereelsen = false;

public Builder(int hana) {
this.hana = hana;
}

public Builder burees(int value) {
burees = value;
return this;
}

public Builder shallasan(boolean value) {
shallasan = value;
return this;
}

public Builder ereelsen(boolean value) {
ereelsen = value;
return this;
}

public Ger build() {
return new Ger(this);
}
}

private Ger(Builder builder) {
hana = builder.hana;
burees = builder.burees;
shallasan = builder.shallasan;
ereelsen = builder.ereelsen;
}
}

Дээрх конструкторыг дараах байдлаар гинжин хэлбэрээр дуудах боломжтой. Учир нь setter метод бүр builder обьектыг буцаах тул.

Ger ger = new Ger.Builder(5).burees(2).shallasan(true).ereelsen(true).build();

Java Standard API болох StringBuilder класс ба Effective Java, 2nd Edition by Josh Bloch номоос санаа авав.


2 Comments

nb · 2013/05/10 at 16:42

sain bain u, bolorsoft odoo program hogjuuleh talar ajild avch bga yu. bi odoo togsoj baigaa yum. omno jil tanii architecture-iin hicheliig uzej baisan.

Ulzii · 2014/12/15 at 11:27

Энэ бичлэг их энгийн ойлгомжтой юмаа

Leave a Reply

Your email address will not be published. Required fields are marked *