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!
|
|
|---|
|
0
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 |
|
|
|
0
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
|
|
|
|
0
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 |
|
|
|
0
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 :-) |
|
|
|
0
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. |
