VNIT

Too lazy to think of a slogan

Trang chủ » Diễn Đàn » Lập trình và Phát triển Web » Software Engineering - Công Nghệ Phần Mềm » Factory Method pattern và Abstract Factory pattern???

Chủ đề đã bị khóa, bạn không thể xóa, sửa hay trả lời trong chủ đề này!

First Page Previous Page  1  Next Page Last Page
Locked Factory Method pattern và Abstract Factory pattern???
0
question Gởi bởi knd (5:34 17-11-2004)
Bài: 176 / Điểm VCS: 173 /

Trong Factory Method pattern, người ta có thể tạo 1 factory bằng cách implement 1 interface hoặc extends 1 abstract class. Nhưng cũng có thể viết 1 concrete class với việc implement 1 factory method mặc định, sau đó có thể override nó ở subclass để implement một kiểu chọn khác.

Vậy tại sao trong Abstract Factory pattern, người ta chỉ nói đến việc tạo factory bằng cách implement 1 interface hoặc extends 1 abstract class mà ko sử dụng cách override factory method mặc định kia?

Phố rùm dạo này tĩnh lặng, nhất là cái box này, ngoài bài Craftman của anh hnd ra. Mọi người ơi nhào vô đê. Anh cl mắng em chứ? ;-)
when i have kids
i won't put any chains on their wrists, i won't
i'll tell them this
there's nothing in this world that you can't be if you want it enough
Locked Re: Factory Method pattern và Abstract Factory pattern???
0
smile Gởi bởi cl (18:43 17-11-2004)
Bài: 2,188 / Điểm VCS: 1,988 /


Vậy tại sao trong Abstract Factory pattern, người ta chỉ nói đến việc tạo factory bằng cách implement 1 interface hoặc extends 1 abstract class mà ko sử dụng cách override factory method mặc định kia?

Vậy gọi là abstract hay overriding factory? Sao đi nữa thì overriding một cái concrete factory method là nguồn gốc của nhiều 'đau thương' vì 'hiểu lầm' ;-).
Splendidly null
Locked Re: Factory Method pattern và Abstract Factory pattern???
0
answer Gởi bởi knd (19:14 17-11-2004)
Bài: 176 / Điểm VCS: 173 /



Vậy tại sao trong Abstract Factory pattern, người ta chỉ nói đến việc tạo factory bằng cách implement 1 interface hoặc extends 1 abstract class mà ko sử dụng cách override factory method mặc định kia?

Vậy gọi là abstract hay overriding factory? Sao đi nữa thì overriding một cái concrete factory method là nguồn gốc của nhiều 'đau thương' vì 'hiểu lầm' ;-).


Quả là overrding 1 factory method là nguồn gốc của nhiều "đau thương". Nhưng nếu nhìn trong context của Factory Method thì ko hề sai.

Điều em thấy ở đây là: Trong Factory Method, ta chỉ lựa chọn để tạo ra 1 concrete class. Trong khi đó, trong Abstract Factory thì lại chọn để tạo một suite các concrete class có liên quan đến nhau. Trong Abstract Factory hoàn toàn có thể override nhiều method nhưng thế có vẻ lắt nhắt quá và ta có thể override để tạo các class tuỳ ý mà chưa chắc thuộc 1 suite.

Do you understand? :-D
when i have kids
i won't put any chains on their wrists, i won't
i'll tell them this
there's nothing in this world that you can't be if you want it enough
Locked Re: Factory Method pattern và Abstract Factory pattern???
0
answer Gởi bởi hai79 (23:54 17-11-2004)
Bài: 12 / Điểm VCS: 12 /

Nhìn vào từng concrete class cụ thể thì OK nhưng nếu nhìn viết client gọi thì cách client viết code như thế nào :-), đó là nguồn gốc của mọi lộn xộn xảy ra sau này :-).
    knd cứ thử viết client gọi lớp được sinh ra, nhìn đó và ngẫm nghĩ thử xem :-)
Locked Re: Factory Method pattern và Abstract Factory pattern???
0
answer Gởi bởi kimduquan (0:16 17-01-2010)
Bài: 4 / Điểm VCS: 4 /

Abstract Factory là 1 lớp có nhiệm vụ tạo ra 1 loạt các đối tượng được sử dụng 1 cách trực tiếp bởi Client,còn Factory Method chỉ là 1 phương thức dùng để tạo 1 đối tượng và nó chính là 1 phương thức của Client(thường là phương thức ảo để cho lớp kế thừa của Client quyết định đối tượng nào sẽ được tạo ra).Client ở đây có ý nghĩa là lớp sử dụng mẫu thiết kế cho 1 mục đích nào đó.Ví dụ:
class Application
{
public:
virtual Product* createProduct()=0;//Factory Method
void doSomething()
{
Product* p=createProduct();
//1 số lệnh để sử dụng Product vừa tạo ra
}
};
lớp Application này đóng vai trò là người sử dụng mẫu Factory Method.Để tạo ra 1 thể hiện của lớp Appliction này ta phải định nghĩa 1 lớp ConcreteApplication kế thừa từ lớp Appliction và "che" hàm createProduct().
class Application2
{
public:
void doSomething()
{
AbstractFactory* pFactory=new ConcreteFactory;
Product* p=pFactory->createProduct();
//1 số lệnh để sử dụng Product vừa tạo ra
}
};
class Application này cũng đóng vai trò là người sử dụng mẫu nhưng để tạo 1 thể hiện của lớp Application2 ko cần phải định nghĩa lớp kế thừa cho nó.Mặc dù hàm doSomething() của lớp Applicaton và Application2 đều có chung 1 chức năng như nhau,nhưng khác nhau ở cách mà Product được tạo ra.
First Page Previous Page  1  Next Page Last Page

Thống kê

Hiện tại web site có 85,801 thành viên. Xin chào đón thành viên mới nhất meocon_th_90.

Các thành viên đã tạo 62,791 chủ đề và 241,917 bài viết trong 30 box.

Hiện có 0 thành viên và 1 khách đang trực tuyến.

Template by styleshout / Icons by Tango Icon Library and FamFamFam.