This page is READ-ONLY. It is generated from the old site.
All timestamps are relative to 2013 (when this page is generated).
If you are looking for TeX support, please go to VietTUG.org

Abstract Factory Pattern

series of design patterns
Added by bronzeboyvn 5 months ago

Bài toán: khi ta có nhiều nhà máy cùng sản xuất những loại sản phẩm tương đồng. Người dùng cần sản phẩm cụ thể của một nhà máy cụ thể tại thời điểm run-time. Quá trình tạo dòng sản phẩm của từng nhà máy được che dấu hoàn toàn. Trong quá trình phát triển hệ thống, nếu các nhà máy này san xuất thêm nhiều dòng sản phẩm mới, mả nguồn chương trình phải thay đổi nhiều.

Ví dụ: ta có nhiều nhà máy sữa: vinamilk, dutch lady, true milk, v..v... Những nhà máy này sản xuất các sản phẩm: milk, yaourt, kefir v..v..

C++

 1 class Factory {
 2 public:
 3     virtual Milk* createMilk() = 0;
 4     virtual Yaourt* createYaourt() = 0;
 5 };
 6 
 7 class Milk {
 8 public:
 9     virtual void displayMilk() = 0;
10 };
11 
12 class Yaourt {
13 public:
14     virtual void diplayYaourt() = 0;
15 };
16 
17 class Vinamilk: public Factory {
18 public:
19     Milk* createMilk() { return new VinamilkMilk(); }
20     Yaourt* createYaourt() { return new VinamilnYaourt(); }
21 };
22 
23 class Dutchlady: public Factory {
24 public:
25     Milk* createMilk() { return new DutchladyMilk(); }
26     Yaourt* createYaourt() { return new DutchladyYaourt(); }
27 };
28 
29 class VinamilkMilk: public Milk {
30 public:
31     void displayMilk() { // display milk of Vinamilk }
32 };
33 
34 class DutchladyMilk: public Milk {
35 public:
36     void displayMilk() { // display milk of Dutchlady }
37 };
38 
39 class VinamilkYaourt: public Yaourt {
40 public:
41     void displayYaourt() { // display yaourt of Vinamilk }
42 }
43 
44 class DutchladyYaourt: public Yaourt {
45 public:
46     void displayYaourt() { // display yaourt of Dutchlady }
47 }

Java

 1 interface Factory {
 2     public Milk createMilk();
 3     public Yaourt createYaourt();
 4 }
 5 
 6 interface Milk {
 7     public void displayMilk();
 8 }
 9 
10 interface Yaourt {
11     public void displayYaourt();
12 }
13 
14 class Vinamilk implements Factory {
15     public Milk createMilk() { return new VinamilkMilk(); }
16     public Yaourt createYaourt() { return new VinamilkYaourt(); }
17 }
18 
19 class Dutchlady implements Factory {
20     public Milk createMilk() { return new DutchladyMilk(); }
21     public Yaourt createYaourt() { return new DutchladyYaourt(); }
22 }
23 
24 class VinamilkMilk implements Milk {
25     public void displayMilk() { // display milk of Vinamilk }
26 }
27 
28 class DutchladyMilk implements Milk {
29     public void displayMilk() { // display milk of Dutchlady }
30 }
31 
32 class VinamilkYaourt implements Yaourt {
33     public void displayYaourt() { // display yaourt of Vinamilk }
34 }
35 
36 class DutchladyYaourt implements Yaourt {
37     public void displayYaourt() { // display yaourt of Dutchlady }
38 }

(to be continued ..)


Comments