Chương 1 LỜi nóI ĐẦU



tải về 396.06 Kb.
trang4/7
Chuyển đổi dữ liệu02.09.2016
Kích396.06 Kb.
#31264
1   2   3   4   5   6   7

3.2.2. Mẫu khởi tạo


Mẫu khởi tạo trừu tượng hoá quá trình khởi tạo(tạo nấc). Mẫu khởi tạo giúp cho hệ thống độc lập vào các đối tượng của nó được tạo ra như thế nào, soạn như thế nào, và biểu diễn như thế nào. Một lớp mẫu khởi tạo sử dụng tính kế thừa để biến đổi lớp đã khởi tạo, nhưng ngược lại một đối tượng mẫu khởi tạo sẽ giao việc khởi tạo tới đối tượng khác.

Creational trở nên quan trọng khi các hệ thống có nhiều sự phụ thuộc vào thành phần đối tượng hơn là lớp kế thừa.

Có hai vấn đề tuần hoàn trong các mẫu này là : Chúng đều bao gói kiến thức(nội dung) về những lớp thực hiện mà hệ thống sử dụng. Thứ hai là chúng đều ẩn đi làm thế nào mà các thể hiện của các lớp này được tạo ra và được đặt cạnh nhau.

Kết quả là mẫu khởi tạo đều đưa ra nhiều hiệu quả hơn trong cái gì đã được tạo ra, ai tạo ra chỳng, nó được tạo ra như thế nào, và khi nào thì tạo ra chỳng. Chỳng cho phép ta cấu hình một hệ thống với các “product” object, biến đổi rộng trong cấu trúc và chức năng. Cấu hình có thể tĩnh(được chỉ định trong thời gian biên dịch) hoặc động(được chỉ định trong thời gian chạy).

Trong 23 mẫu thiết kế mà tôi nghiên cứu và tìm hiểu, thì trong mẫu khởi tạo có những mẫu sau:

Abstract Factory

Builder

Factory Method



Prototype

Singleton

Do các mẫu khởi tạo có mối liên quan gần với nhau, ở đây ta nghiên cứu có 5 mẫu mà làm nổi bật nên sự tương đồng và khác nhau của chúng.

Chọn mẫu nào còn phụ thuộc vào nhiều yếu tố, và tuỳ vào mục đích dự án của mình mà ta sử dụng các mẫu cụ thể cũng như khi ta kết hợp các mẫu này với nhau trong dự án của mình.

Sau đây tôi xin trình bày tổng quan về mục đích, cấu trúc và các mẫu thiết kế của từng mẫu cụ thể trong phần mẫu khởi tạo cũng như khi ta áp dụng chúng vào trong thiết kế dự án cũng như từng phần của dự án thì thu được những kết quả gì.

3.2.2.1. Abstract Factory.

3.2.2.1.1 Mục đích

Cung cấp một giao diện để tạo ra các họ của các đối tượng phụ thuộc hoặc liên quan đến nhau mà không phải xác định chính xác các lớp thực hiện của chúng.
3.2.2.1.2 Ví dụ

Coi bộ dụng cụ giao diện người dùng cung cấp các tiêu chuẩn đa giao diện như là Motif và Presentation Manager. Các thể hiện và hoạt động khác nhau cho giao diện người dựng” widgets” giống như scroll bar, window, và cỏc nỳt.Theo tiêu chuẩn này, một ứng dụng có thể khụng khú mó hoỏ cỏc widget của nó cho từng khía cạnh cảm nhận và nhỉn. Các lớp khởi tạo của widget thông qua ứng dụng này làm cho nó khú mà chuyển đổi sau đó.

Giải pháp đặt ra là định nghĩa một lớp WidgetFactory ảo, khai báo một giao diện cho việc tạo từng loại cơ bản trong widget. Cũng có một lớp ảo cho từng loại trong widget, và các lớp con thực hiện cài đặt các widget. Giao diện WidgetFactory có một thao tác trả về một đối tượng widget cho từng lớp widget ảo. Các client gọi những thao tác này để sử dụng các thể hiện widget, nhưng các client không nhận biết được các lớp cụ thể mà chúng sử dụng. Có một lớp con cụ thể của WidgetFactory cho từng tiêu chuẩn một. Mỗi lớp con cài đặt các thao tác để tạo các widget tương ứng. Ví dụ, hàm CreateScrollBar trong MotifWidgetFactory thể hiện và trả về một Motif scroll bar, trong khi các thao tác tương ứng trong PMWidgetFactory trả về một scroll bar cho Presentation Manager. Các client tạo các widget đơn nhất thông qua giao diện WidgetFactory và các lớp cài đặt các widget cho chúng.

Một WidgetFactory cũng tuân thủ sự phụ thuộc giữa các lớp widget cụ thể. Một Motif scroll bar có thể được sử dụng với nút Motif và một soạn thảo text Motif, và ràng buộc này phải tự động tuân theo như kết quả khi sử dụng MotifWidgetFactory.

3.2.2.1.3 Ứng dụng

Một hệ thống có thể độc lập vào sản phẩm của nó được tạo ra, kết cấu và biểu diễn như thế nào.

Một hệ thống có thể được định dạng với một trong nhiều họ của sản phẩm. Một họ của các đối tượng sản phẩm liên quan được thiết kế để được sử dụng cùng nhau và cần thiết tuân thủ các ràng buộc này.

Bạn muốn cung cấp một thư viện lớp của các sản phẩm và muốn chỉ đưa ra giao diện của chúng, mà không cần đưa ra cách cài đặt của chúng.

3.2.2.1.4 Cấu trúc


Client





















3.2.2.1.5 Các thành phần

  • AbstractFactory: Khai báo một giao diện cho các thao tác mà tạo các đối tượng sản phẩm trừu tượng.

  • ConcreteFactory: Cài đặt các thao tác để tạo các đối tượng sản phẩm cụ thể.

  • AbstractProduct: Khai báo một giao diện cho một dạng của đối tượng sản phẩm.

  • ConcreteProduct: Định nghĩa một đối tượng sản phẩm được tạo bởi concrete factory tương thích.

    • thực hiện giao thức AbstractProduct.

  • Client: Chỉ sử dụng cho các giao diện được khai báo bởi AbstractFactory và các lớp AbstractProduct.
3.2.2.1.6 Phối hợp cộng tác với các mẫu khác:

Thường là một thể hiện lớp ConcreteFactory đơn lẻ được tạo tại thời gian chạy, concrete factory này tạo các đối tượng sản phẩm cài đặt trường hợp riêng biệt. Để tạo các đối tượng sản phẩm khác nhau, client có thể sử dụng một concrete factory khác nhau.

AbstractFactory làm theo việc tạo của các đối tượng sản phẩm tới lớp con Concrete Factory.


3.2.2.1.7 Kết quả

Cô lập với các lớp thực hiện : Giúp bạn kiểm soát được các lớp trong các đối tượng mà ứng dụng tạo ra.Vỡ, một factory bao gói trách nhiệm và quá trình tạo các đối tượng sản phẩm, nó cô lập các client từ các lớp cài đặt của nó. Client sử dụng các thể hiện thông qua các giao diện trừu tượng của chúng. Cỏc tờn của lớp sản phẩm được cô lập trong quá trình cài đặt của các factory cụ thể; nờn chỳng khụng xuất hiện trong mã của client.

Tạo ra sự thay đổi các họ sản phẩm một cách dễ dàng : Lớp của Concrete factory chỉ xuất hiện một lần trong ứng dụng, tại vị trí mà nó được tạo ra.Cú thể sử dụng các định dạng sản phẩm khác nhau một cách đơn giản bằng cách thay đổi concrete factory. Do một abstract factory tạo một họ đầy đủ các sản phẩm.

Tăng mối quan hệ vững chắc giữa các sản phẩm . Khi các đối tượng sản phẩm trong một họ được thiết kế để làm việc cùng nhau, điều quan trọng là một đối tượng sử dụng các đối tượng chỉ từ một họ, tại một thời điểm.

Đưa ra các kiểu dạng mới của sản phẩm là khó. Do vì mở rộng các factory trừu tượng để tạo các dạng mới của Product là không đơn giản. Điều đó có nghĩa là giao diện AbstractFactory cố định một tập các sản phẩm có thể được tạo. Để đưa ra các dạng mới của các sản phẩm thì cần yêu cầu mở rộng giao diện factory, điều đó cũng có nghĩa là giải quyết sự thay đổi lớp AbstractFactory và tất cả các lớp con của nó.


3.2.2.1.8 Cài đặt

Factory là đơn lẻ : Một ứng dụng riêng biệt chỉ cần một thể hiện của Concrete Factory cho mỗi họ sản phẩm. Trong trường hợp này nờn dựng mẫu Singleton.

Tạo các sản phẩm : Abstract Factory chỉ khai báo một giao diện cho việc tạo các sản phẩm. Tuỳ thuộc vào các lớp con ConcreteProduct để tạo chúng. Phương pháp chung để thực hiện việc này là định nghĩa một factory method cho từng sản phẩm.

Định nghĩa các factory có thể được mở rộng.Mỗi dạng sản phẩm thường được AbstractFactory định nghĩa một thao tác khác nhau. Các loại sản phẩm được mó hoỏ trong các thao tác ký pháp. Do vậy, thêm một loại mới của sản phẩm yêu cầu sự thay đổi giao diện AbstractFactory và tất cả các lớp con phụ thuộc vào nó. Một giải pháp thiết kế hiệu quả và ít rủi ro hơn là thêm vào một tham số tới các thao tác tạo đối tượng. Tham số này chỉ ra dạng đối tượng có thể tạo được. Nó có thể là một lớp nhận dạng, một số nguyên, một xâu, hoặc có thể chỉ ra dạng của sản phẩm. Với phương pháp này, AbstractFactory chỉ cần một thao tác “Make” đơn với một tham số để chỉ ra một dạng đối tượng cần tạo.

3.2.2.1.9 Các mẫu thiết kế liên quan

Các lớp Abstract Factory thường được cài đặt với factory method, nhưng chúng cũng có thể được cài đặt bằng cách sử dụng Prototype.

Một concrete factory thường là đơn nhất.


3.2.2.2. Builder


Mục đích : Phân tách việc xây dựng của đối tượng phức tạp dựa trên biểu diễn của nó, do đó cùng một tiến trình xây dựng có thể tạo ra các biểu diễn khác nhau.
3.2.2.2.1 Ví dụ

Reader đối với dữ liệu RTF có thể thay đổi định dạng, và chuyển sang một số dạng text khác như ASCII hoặc text wigdet. Và số lượng khả năng chuyển đổi là không kết thúc. Nờn nó có thể dễ dàng thêm vào một chuyển đổi mới mà không cần phải chỉnh sửa.

Giải pháp tốt là định dạng lớp RTFReader với đối tượng TextConverter, chuyển đổi RTF sang biểu diễn text khác. Như khi RTFReader phân tách dữ liệu RTF, nó sử dụng TextConverter để thực hiện việc chuyển đổi này,dưới dạng chuyển đổi thẻ bài. Các đối tượng TextConverter là có trách nhiệm cho việc thực hiện chuyển đổi dữ liệu và đối với việc biểu diễn một thẻ bài trong từng định dạng một. Các lớp con của TextConverter chỉ ra trong các chuyển đổi và các định dạng khác nhau.

Từng dạng lớp chuyển đổi có kỹ thuật tạo và cài đặt đối tượng phức tạp, và đặt chúng dưới dạng một giao diện trừu tượng. Việc chuyển đổi như thế nào là do reader phân tách. Trong mẫu này mỗi lớp chuyển đổi được gọi là builder, và một reader được gọi là director.

Trong v í dụ này ta nên áp dụng mẫu Builder, và mẫu Builder phân tách thuật toán cho việc dịch một định dạng text, làm thế nào để một chyển đổi định dạng đã tạo, đã biểu diễn. Nó cho phép sử dụng lại thuật toán chuyển đổi của RTFReader để tạo các biểu diễn text khác nhau từ tài liệu RTF- chỉ được định dạng RTFReader với các lớp con của TextConverter.


3.2.2.2.2 Ứng dụng

Sử dụng một thuật toán xây dựng một đối tượng phức tạp nên có thể độc lập với các thành phần tạo nên đối tượng cũng như việc chúng được lắp ghép lại với nhau như thế nào.

Quá trình xây dựng phải cho phép các biểu diễn khác nhau đối với đối tượng mà nó xây dựng.


3.2.2.2.3 Cấu trúc:




3.2.2.2.4 Thành phần

Builder : Định nghĩa một giao diện trừu tượng để tạo các thành phần của Product object.

ConcreteBuilder:



      • Xây dựng và lắp ráp các phần của sản phẩm bằng cách cài đặt giao diện Builder.

      • Định nghĩa và theo dõi biểu diễn mà nó tạo ra.

      • Cung cấp một giao diện cho việc thu được sản phẩm.

Director: Xây dựng một đối tượng bằng việc sử dụng giao diện Builder.

Product


  • Biểu diễn đối tượng phức tạp dưới dạng xây dựng. ConcreteBuilder xây dựng biểu diễn bên trong của sản phẩm và định nghĩa tiến trình xử lý mà nó được lắp ráp.

  • Bao hàm các lớp mà định nghĩa các phần hợp thành, bao gồm các giao diện đối với việc cài đặt các phần vào kết quả cuối cùng.
3.2.2.2.5 Phối hợp cộng tác.

Client tạo đối tượng Director và cấu hình nó với việc yêu cầu đối tượng Builder.

Director thông báo cho builder bất kỳ khi nào một phần của product có thể được xây dựng.

Builder nắm giữ các yêu cầu từ director và thờm cỏc phần tới sản phẩm.

Client thu lại sản phẩm từ builder..


3.2.2.2.6 Kết quả

Cho phép thay đổi biểu diễn bên trong của sản phẩm. Đối tượng Buider cung cấp cho director một giao diện trừu tượng để xây dựng sản phẩm

Giao diện này cho phép ẩn đi cách biểu diễn và cấu trúc trong của sản phẩm, cũng ẩn sản phẩm đã lắp ghép như thế nào từ các thành phần cấu thành. Do, sản phẩm được xây dựng qua một giao diện trừu tượng nên tất cả những gì bạn cần làm để thay đổi cách biểu diễn bên trong của product là định nghĩa một Builder mới.

Xây dựng và biểu diễn có mã nguồn tách biệt. Mẫu Builder tăng tính modul hoá bằng cách bao gói phương pháp một đối tượng phức tạp đã được tạo ra và cỏch nó được biểu diễn như thế nào. Client không cần biết gì về các lớp định nghĩa cấu trúc bên trong của sản phẩm, các lớp như thế không xuất hiện trong giao diện Builder. Mỗi ConcreteBuilder chứa tất cả mã nguồn để tạo và lắp ráp một dạng product cụ thể. Mã nguồn được viết một lần và các director có thể sử dụng lại để xây dựng các biến thể khác của sản phẩm từ một tập các thành phần.

Giúp kiểm soát tốt hơn trong quá trình xây dựng: Không giống như các creational mẫu khác xây dựng các sản phẩm trong một lần ( one shot)., Builder mẫu xây dựng sản phẩm từng bước một dưới kiểm soát của director. Chỉ khi nào sản phẩm được hoàn thành thì director thu lại nó từ Builder. Do đó, giao diện Builder phản ánh quá trình xây dựng product đầy đủ rõ ràng hơn các mẫu khởi tạo khỏc. Giỳp điều khiển quá trình xây dựng tốt hơn.


3.2.2.2.7 Cài đặt

Đặc thù là có một lớp Builder trừu tượng định nghĩa một thao tác cho từng thành phần, director có thể hỏi đến nó để tạo. Lớp ConcreteBuilder ghi lồng các thao tác cho các thành phần

Cài đặt và xây dựng giao diện : Các Builder xây dựng sản phẩm của chúng theo từng bước một, vấn đề thiết kế chính liên quan đến mô hình cho việc xử lý xây dựng và cài đặt.

Tại sao không có lớp trừu tượng nào cho các sản phẩm? Trong những trường hợp chung chung, các sản phẩm tạo ra bởi các builder concrete khác rất nhiều so với việc biểu diễn của chúng, trong đó số nhỏ thu được từ việc đưa ra các sản phẩm khác nhau từ một lớp cha thông thường.

Các phương pháp rỗng như là sự lựa chọn trong Builder: Trong C++, Build method thường mang tính chất thực hiện không khai báo các thành viên chức năng ảo. Chúng được định nghĩa như một phương pháp rỗng, cho phép các client ghi đè chỉ khi các thao tác mà chúng liên quan mật thiết tới.


3.2.2.2.8 Các Mẫu quan hệ

Abstract Factory thường tương tự với Builder trong đó nó cũng có thể xây dựng các đối tượng phức tạp. Cái khác nhau trước hết là Builder mẫu tập trung vào việc xây dựng một đối tượng phức tạp từng bước một. Tầm quan trọng của Abstract Factory là trong một họ các đối tượng sản phẩm (đơn giản hoặc phức tạp). Builder đưa ra sản phẩm như là bước cuối cùng, nhưng tới một chừng mực nào đó mà Abstract Factory được quan tâm, sản phẩm được đưa ra một cách trực tiếp và nhanh chóng (get returned immediately).

3.2.2.3. Factory Method

3.2.2.3.1 Mục đích

Định nghĩa một giao diện cho việc tạo một đối tượng, nhưng cho phép các lớp con quyết định lớp nào khởi tạo, factory method để một lớp dựa theo việc khởi t ạo đó để tới các lớp con.
3.2.2.3.2 Ví dụ

Framework sử dụng các lớp trừu tượng để định nghĩa và duy trì quan hệ giữa các đối tượng. Một framework thường chịu trách nhiệm tạo những đối tượng.

Coi một framework đối với việc áp dụng có thể biểu diễn nhiều document tới user. Hai lớp trừu tượng chính trong framework này là các lớp Application và Document. Cả hai lớp này là trừu tượng, và các client phải phân lớp chúng để thực hiện các application-specific của chúng. Để tạo một ứng dụng vẽ, ví dụ, chúng ta định nghĩa các lớp DrawingApplication và DrawingDocument. Lớp Application có nhiệm vụ chính là quản lý Document và sẽ tạo chúng theo yêu cầu – khi mà user chọn Open hoặc là New từ menu.

Factory Method đề ra được một giải pháp. Nó bao gói các hiểu biết của lớp con Document nào tạo và dịch chuyển hiểu biết này ra khỏi framework.

Các lớp con Application định nghĩa lại một thao tác CreateDocument trừu tượng trong Application để trả về một lớp con Document tương ứng. Chúng ta gọi CreateDocument là một factory method do nó cú nhiệm vụ đối với việc sản xuất một đối tượng.


3.2.2.3.3 Thành phần

Một lớp không thể biết trước lớp của các đối tượng nó phải tạo.

Một lớp muốn các lớp con của nó định nghĩa các đối tượng mà nó tạo.


3.2.2.3.4 Cấu trúc:




3.2.2.3.5 Thành phần:

Product:

Định nghĩa một giao diện của các đối tượng một factory method tạo.

ConcreteProduct:

Thực hiện giao diện Product.

Creator:

Khai báo factory method, mà đưa ra một đối tượng của của dạng Product. Creator có thể cũng định nghĩa là một default implementation của factory method để trả về một đối tượng ConcreteProduct mặc định.

Có thể gọi factory method để tạo một đối tượng Product.

ConcreteCreator:

Ghi đè factory method để trả về một thể hiện của ConcreteProduct thích hợp.

3.2.2.3.6 Kết quả

Factory method bỏ qua sự cần thiết để nối kết các lớp định nghĩa ứng dụng (application – specific) vào trong mã nguồn. Mã nguồn chỉ thực hiện với giao diện Product;. Ngoài ra cũn có :

Cung cấp các móc nối cho các lớp con.: tạo các đối tượng bên trong một lớp với một factory method hữu hiệu hơn là tạo một đối tượng một cách trực tiếp. Factory method đưa cho các lớp con một kết nối để cung cấp một phiên bản mở rộng của đối tượng.

Kết nối các biểu đồ lớp song song .Các biểu đồ lớp song song đưa ra kết quả khi một lớp đưa ra các thành phần để phân chia lớp.

3.2.2.3.7 Cài đặt

Có hai dạngbiến đổi chính :Trước hết là khi lớp Creator là lớp trừu tượng và không cung cấp một cài đặt nào cho factory method mà nó khai báo, trường hợp này yêu cầu lớp con định nghĩa một cài đặt.

Trường hợp thứ hai là : Khi Creator là lớp thực hiện, và cung cấp mặc định cài đặt cho factory method.

Tham số hoá factory method. Factory method sử dụng một tham số để phân biệt được dạng của đối tượng để tạo. Tất cả các đối tượng mà factory method tạo sẽ được sử dụng trong giao diện Product.

Sử dụng template để tránh việc phân lớp. Một vấn đề cơ bản khác với factory method là phải phân lớp khi tạo các đối tượng Product tương thích.

class Creator {

public:


virtual Product*CreateProduct() = 0;

};

template



class StandardCreator : public Creator {

public:


virtual Product * CreateProduct();

};

template



Product * StandardCreator:: CreatorProduct(){

return new TheProduct;

}

Với template này, client cung cấp một product class – không phân lớp Creator.



class MyProduct : public Product{

public :


Myproduct();

//....


};

StandardCreatormyCreator;

Đặt tên sự chuyển đổi.

3.2.2.3.8 Các mẫu liên quan:

Abstract Factory thường được thực hiện với factory method. Factory method thường đựoc gọi cùng Template Method. Trong ví dụ Document, NewDocument là template method.

Prototype không yêu cầu việc phân lớp Creator. Tuy nhiên, chúng thường yêu cầu một thao tác khởi tạo trong lớp Product. Creator sử dụng Initialize để khởi tạo một đối tượng. Factory Method không yêu cầu như một thao tác.


3.2.2.4. Prototype

3.2.2.4.1 Mục đích

Chỉ ra các dạng của nhiều đối tượng để tạo bằng cách dùng một thể hiện mẫu ban đầu, và tạo các đối tượng mới bằng việc sao chép mẫu này.
3.2.2.4.2 Ví dụ

Có thể xây dựng một soạn thảo cho các điểm nhạc bằng cách làm theo một khung tổng quát cho các soạn thảo đồ hoạ và thêm vào các đối tượng mới để biểu diễn ghi chú, các điểm dừng,cỏc đoạn nhạc. Khung soạn thảo có thể có một bảng công cụ đối với việc thờm cỏc đối tượng nhạc tới các điểm. Bảng công cụ cũng có thể chứa công cụ để cho phép chọn lựa, di chuyển, hay các thao tác xử lý dựa trên đối tượng âm nhạc đó.

Giả sử, framework cung cấp một lớp ảo Graphic cú cỏc thành phần đồ hoạ, giống như là các ghi chú, và các đoạn nhạc. Hơn nữa, nó cũng cung cấp một lớp Tool ảo cho việc định nghĩa các công cụ giống các thao tác trong bảng công cụ. Framework cũng định nghĩa trước một lớp con GraphicTool cho các công cụ tạo các thể hiện của các đối tượng đồ hoạ và thờm chỳng vào dữ liệu.

Nhưng Graphic Tool biểu diễn một vấn đề cho thiết kế framework. Các lớp cho các ghi chú và các đoạn chỉ ra phần ứng dụng, nhưng lớp GraphicTool thuộc về framework. GraphicTool không biết làm thế nào để tạo các thể hiện của đối tượng nhạc, nhưng cũng tạo rất nhiều lớp con. Chúng ta cũng biết thành phần đối tượng là sự lựa chọn hiệu quả tới việc phân lớp. Một câu hỏi đặt ra là, làm thế nào một framework sử dụng nó để tham số hoá thể hiện của GraphicTool bởi lớp nào của Graphic mà chúng hỗ trợ để tạo ra?Giải pháp được nằm trong GraphicTool tạo một Graphic mới bằng cách sao chép hoặc nhân bản một thể hiện của lớp con Graphic. Chúng ta gọi thể hiện này là mẫu. GraphicTool được tham số hoá bởi mẫu, nó có thể nhân bản và thêm vào tới document. Nếu tất cả các lớp con Graphic thwcj hiện thao tác Clone, sau đó GraphicTool có thể nhân bản bất kỳ một dạng nào của Graphic.

Nên trong soạn thảo nhạc, mỗi công cụ tạo một đối tượng nhạc là một thể hiện GraphicTool mà nó tạo với các mẫu khác nhau. Mỗi GraphicTool sẽ tạo ra một đối tượng nhạc khi nhân bản mẫu của nó và thêm một nhân bản tới điểm nhạc.

Có thể sử dụng Prototype pattern để làm giảm số lượng các lớp thậm chí con số này còn nhiều hơn nữa. Ta chia các lớp cho toàn bộ ghi chú hoặc phân nửa các ghi chú, nhưng cũng có thể không cần thiết. Thay vào đó cỏc thể hiện của cùng một lớp được khởi tạo bởi các hình ảnh và thời gian khác nhau.

3.2.2.4.3 Kết quả

Sử dụng Prototype khi một hệ thống độc lập với sản phẩm của nó được tạo ra, kết cấu, và biểu diễn như thế nào.

Khi các lớp để khởi tạo được xác định tại thời gian chạy ; hoặc

Để tránh việc xây dựng một biểu đồ lớp của các factory tương đương với biểu đồ lớp của các sản phẩm.

Khi các thể hiện của một lớp có thể có một trong một số các tổ hợp trạng thái khác nhau. Nó thuận tiện hơn để cài đặt một số lượng các mẫu tương đương và nhân bản chúng hơn là phải khởi tạo một lớp, tương đương với mỗi thời điểm của trạng thái.



3.2.2.4.4 Cấu trúc




3.2.2.4.5 Thành phần :

Prototype: Khai báo một giao diện cho việc nhân bản bản thân nó.

ConcretePrototype: Thực hiện một thao tác để tự nhân bản nó.

Client: Tạo một đối tượng mới bởi việc yêu cầu nhân bản nguyên mẫu.

3.2.2.4.6 Phối hợp cộng tác

Một client yêu cầu một mẫu để tự nhân bản.
3.2.2.4.7 Kết qủa

Nó ẩn một số lớp sản phẩm concrete từ client, làm giảm số lượng tên của các client biết về nó.

Các mẫu tạo điều kiện kết hợp một lớp sản phẩm thực hiện mới vào một hệ thống một cách đơn giản bằng việc đăng kí một thể hiện mẫu với client. Hiệu quả hơn là những mẫu khởi tạo khác, do một client có thể cài đặt và bác bỏ các mẫu tại thời gian chạy.

Định nghĩa các đối tượng mới bằng cách biến đổi các giá trị. Các hệ thống biến đổi động cao cho phép bạn định nghĩa hoạt động mới thông qua thành phần đối tượng, bởi việc xác định các giá trị cho biến đối tượng.Vớ dụ bằng cách xác định giá trị các biến đối tượng và không phải định nghĩa thêm lớp mới. Bạn định nghĩa các loại đối tượng mứoi một cách có hiệu quả bằng việc tạo các thể hiện của các lớp đó cú và đăng ký cỏcthể hiện đó như các mẫu của các đối tượng client. Một client có thể đưa ra một hoạt động mới bằng cách gán chức năng cho nguyên mẫu.

Định nghĩa các đối tượng mới bằng cách thay đổi cấu trúc. Một số các ứng dụng xây dựng các đối tượng từ các phần hoặc các phần con. Các soạn thảo cho thiết kế vòng tròn, ví dụ, xây dựng các đường vòng ra khỏi cỏc vũng con. Để cho thuận tiện, như các ứng dụng thường giúp ta khởi tạo các cấu trúc phức tạp, cấu trúc người dùng định nghĩa, cũng nói rằng, để sử dụng cỏc vũng con đã định nghĩa những lần sau.

Làm giảm sự phân lớp. Mẫu Prototype giúp ta nhân bản một nguyên mẫu thay vì yêu cầu một factory method để tạo đối tượng mới.

3.2.2.4.8 Cài đặt

Sử dụng một quản lí mẫu khi số lượng các mẫu trong hệ thống không được thông qua, chúng có thể được tạo hay huỷ động.

Thực hiện các thao tác nhân bản. Phần khó nhất của mẫu Prototype là thực hiện thao tác nhân bản sao cho chính xác.

Khởi tạo các nhân bản.

3.2.2.4.9 Các mẫu liên quan

Prototype và Abstract Factory là các mẫu tương thích trong một số trường hợp, như chúng ta đã thảo luận tại cuối phần này. Chúng có thể được sử dụng cùng nhau, tuy nhiên. Một Abstract Factory cũng lưu trữ một tập các mẫu từ đó nhân bản và trả về các đối tượng sản phẩm.

Các thiết kế nặng vấn đề sử dụng của Composite và Decorator mẫu thường có hiệu quả với Prototype tốt.



Каталог: books -> luan-van-de-tai -> luan-van-de-tai-cd-dh
luan-van-de-tai-cd-dh -> Thế kỷ 21, cùng với sự phát triển nh­ vũ bão của khoa học kỹ thuật, của công nghệ thông tin. Sự phát triển kinh tế tác động đến tất cả mọi mặt đời sống kinh tế xã hội
luan-van-de-tai-cd-dh -> VIỆN ĐẠi học mở HÀ NỘi khoa công nghệ thông tin đỒ Án tốt nghiệP ĐẠi họC
luan-van-de-tai-cd-dh -> Phần một : Tình hình thu hút vốn đầu tư trên thị trường vốn việt nam hiện nay
luan-van-de-tai-cd-dh -> TRƯỜng đẠi học cần thơ khoa công nghệ BỘ MÔN ĐIỆn tử viễn thôNG
luan-van-de-tai-cd-dh -> Em xin chân thành cảm ơn! Vị Xuyên, ngày 19 tháng 5 năm 2012 sinh viêN
luan-van-de-tai-cd-dh -> PHẦn I mở ĐẦu tầm quan trọng và SỰ ra đỜi của giấY
luan-van-de-tai-cd-dh -> Đề tài: Tìm hiểu về vấn đề sử dụng hợp đồng mẫu trong đàm phán ký kết hợp đồng mua bán ngoại thương và thực tiễn ở Việt Nam
luan-van-de-tai-cd-dh -> Đề tài phân tích thực trạng kinh doanh xuất khẩu cà phê nhân của các doanh nghiệP
luan-van-de-tai-cd-dh -> Giao tiếp máy tính và thu nhận dữ liệU ĐỀ TÀI: TÌm hiểu công nghệ 4g lte

tải về 396.06 Kb.

Chia sẻ với bạn bè của bạn:
1   2   3   4   5   6   7




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương