1. Trang chủ
  2. » Luận Văn - Báo Cáo

Các mẫu thiết kế phần mềm hướng đối tượng và áp dụng

86 889 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Các Mẫu Thiết Kế Phần Mềm Hướng Đối Tượng Và Áp Dụng
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Công Nghệ Phần Mềm
Thể loại tiểu luận
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 86
Dung lượng 896 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Phần mềm ngày càng trở nên phức tạp, thách thức trong những năm tới không phải là vấn đề tốc độ, kinh phí hay sức mạnh của nó mà sẽ là độ phức tạp.Vì vậy chúng ta phải dần loại bỏ chúng. Một cách tổng quan khi xây dựng phần mềm thì ta phải quan tâm đến tổ chức, các quan hệ cấu trúc hình thành nên hệ thống. Do khả năng của con người là có giới hạn khi khảo sát các vấn đề phức tạp như tổng thể. Thông qua mô hình hoá ta sẽ giới hạn vấn đề bằng cách nghiên cứu tập trung vào một khía cạnh của vấn đề và vào một thời điểm. Không nên giải quyết tất cả các vấn đề vào một lần thiết kế, cần tranh thủ sử dụng lại những trường hợp đã làm, khi ta tìm được một giải pháp tốt, cần phát huy nó cho lần sau. Xu thế áp dụng phương pháp hướng đối tượng thay cho phương pháp cấu trúc ngày càng phổ biến khi xây dựng các hệ thống phần mềm lớn và phức tạp. Do tầm quan trọng và tính linh hoạt của phương pháp phân tích thiết kế hướng đối tượng được sử dụng rộng rãi tại các nước đang phát triển và đã được áp dụng tại Việt Nam. Phân tích hướng đối tượng là một vấn đề khó, càng khó hơn cho người thiết kế mới vì họ thường lúng túng trong vấn đề chọn lựa phương pháp nào tối ưu cho dự án, cho hệ thống của họ; đồng thời làm sao sử dụng lại và nâng cấp từ những thuật toán hướng đối tượng đã được sử dụng trước đó. Điều này cũng gây trở ngại cho những người cần tìm hiểu về hệ thống đang tồn tại, vì tính ưu việt và đặc trưng của các ngôn ngữ hướng đối tượng nên họ thường hay khó khăn nhận biết các lớp, các đối tượng... kế thừa đặc biệt là trong các dự án lớn, hệ thống lớn Khi gặp một vấn đề, người thiết kế đã lựa chọn một phương pháp tối ưu, sao cho nó tốt nhất, phù hợp nhất, sử dụng dễ, giảm thiểu được độ phức tạp cũng như tiết kiệm công sức cho những lần phát triển lần sau, cũng như những lần tái sử dụng lại chúng. Thông thường khi tìm ra một giải pháp tốt, ta thường lưu lại để sử dụng chúng cho lần sau, để lần sau sẽ ít tốn thời gian để tìm hiểu mà vẫn có thể áp dụng chúng tốt. Chính vì dựa vào khái niệm mẫu thiết kế của Christopher Alexander khi áp dụng trong thiết kế các toà nhà, giúp cho người kiến trúc sư dựa vào một số khuôn dạng sẵn có mà thiết kế theo, hoặc cải tiến nó. Các chuyên gia trong vấn đề thiết kế và lập trình đã đúc rút ra kinh nghiệm để đưa ra một số khuôn dạng chung về mẫu thiết kế phần mềm mà khi áp dụng đáp ứng được phần nào yêu cầu khắt khe của công nghệ phần mềm hiện đại. Và các nhà thiết kế sau này coi đó là một từ vựng chung để thiết kế cũng như khi áp dụng và hiểu chúng để lập trình. Trên thực tế không thể có một mẫu hoàn chỉnh cho phần mềm, nhưng chắc chắn có thể tìm ra một khuôn dạng chung hoàn chỉnh cho các mẫu này

Trang 1

Chương 1 LỜI NÓI ĐẦU

Phần mềm ngày càng trở nên phức tạp, thách thức trong những năm tới không phải là vấn đề tốc độ, kinh phí hay sức mạnh của nó mà sẽ là độ phức tạp.Vì vậy chúng ta phải dần loại bỏ chúng Một cách tổng quan khi xây dựng phần mềm thì ta phải quan tâm đến tổ chức, các quan hệ cấu trúc hình thành nên hệ thống Do khả năng của con người là có giới hạn khi khảo sát các vấn

đề phức tạp như tổng thể Thông qua mô hình hoá ta sẽ giới hạn vấn đề bằng cách nghiên cứu tập trung vào một khía cạnh của vấn đề và vào một thời điểm Không nên giải quyết tất cả các vấn đề vào một lần thiết kế, cần tranh thủ sử dụng lại những trường hợp đã làm, khi ta tìm được một giải pháp tốt, cần phát huy nó cho lần sau.

Xu thế áp dụng phương pháp hướng đối tượng thay cho phương pháp cấu trúc ngày càng phổ biến khi xây dựng các hệ thống phần mềm lớn và phức tạp.

Do tầm quan trọng và tính linh hoạt của phương pháp phân tích thiết kế hướng đối tượng được sử dụng rộng rãi tại các nước đang phát triển và đã được áp dụng tại Việt Nam.

Phân tích hướng đối tượng là một vấn đề khó, càng khó hơn cho người thiết kế mới vì họ thường lúng túng trong vấn đề chọn lựa phương pháp nào tối

ưu cho dự án, cho hệ thống của họ; đồng thời làm sao sử dụng lại và nâng cấp

từ những thuật toán hướng đối tượng đã được sử dụng trước đó Điều này cũng gây trở ngại cho những người cần tìm hiểu về hệ thống đang tồn tại, vì tính ưu việt và đặc trưng của các ngôn ngữ hướng đối tượng nên họ thường hay khó khăn nhận biết các lớp, các đối tượng kế thừa đặc biệt là trong các dự án lớn,

hệ thống lớn Khi gặp một vấn đề, người thiết kế đã lựa chọn một phương pháp tối ưu, sao cho nó tốt nhất, phù hợp nhất, sử dụng dễ, giảm thiểu được độ phức tạp cũng như tiết kiệm công sức cho những lần phát triển lần sau, cũng như những lần tái sử dụng lại chúng Thông thường khi tìm ra một giải pháp tốt, ta thường lưu lại để sử dụng chúng cho lần sau, để lần sau sẽ ít tốn thời gian để tìm hiểu mà vẫn có thể áp dụng chúng tốt Chính vì dựa vào khái niệm mẫu thiết

kế của Christopher Alexander khi áp dụng trong thiết kế các toà nhà, giúp cho người kiến trúc sư dựa vào một số khuôn dạng sẵn có mà thiết kế theo, hoặc cải tiến nó Các chuyên gia trong vấn đề thiết kế và lập trình đã đúc rút ra kinh

Trang 2

nghiệm để đưa ra một số khuôn dạng chung về mẫu thiết kế phần mềm mà khi áp dụng đáp ứng được phần nào yêu cầu khắt khe của công nghệ phần mềm hiện đại Và các nhà thiết kế sau này coi đó là một từ vựng chung để thiết kế cũng như khi áp dụng và hiểu chúng để lập trình.

Trên thực tế không thể có một mẫu hoàn chỉnh cho phần mềm, nhưng chắc chắn có thể tìm ra một khuôn dạng chung hoàn chỉnh cho các mẫu này.

1.1 Khó khăn khi phát triển công nghệ phần mềm và sử dụng Mẫu thiết kế.

Phân tích và thiết kế hướng đối tượng là khó, nhưng mục đích thiết kếhướng đối tượng nhằm được sử dụng lại lần sau lại càng khó hơn Ta cần phảitìm ra các đối tượng, các phần(factor) thích hợp cho từng lớp, từng đối tượng,xác định được hệ thống giao diện cần phải kế thừa như thế nào và thiết lập mốiquan hệ giữa chúng

Chính vì những phức tạp đó mà rất khó và lâu dài các chuyên gia mới tìm rađược một khuôn dạng chung cho phần mềm, mặt khác các dự án và các hệ thốngphần mềm khi phát triển đều có mức độ trừu tượng hoá cao, nên ngôn ngữ đôikhi cũng ở mức trừu tượng hoá và rất khó cho người sử dụng khi tìm hiểu vềchúng Ngay cả các chuyên gia khi hoàn thành nghiên cứu cũng thừa nhận họkhông hiều về những gì mà họ viết ra trong lần viết đầu tiên

Đặc biệt là khi hiểu được và thiết kế theo hướng đối tượng, để áp dụng cácmẫu thiết kế này vào trong hệ thống, dự án của mình thì người áp dụng cần phảinắm rõ và vững ít nhất một ngôn ngữ lập trình hướng đối tượng và phải có kinhnghiệm trong thiết kế hướng đối tượng Theo kinh nghiệm làm việc, và bằngchính khả năng của mình, cũng như độ nhạy cảm trong phân tích mà người pháttriển mới có khả năng áp dụng chúng vào trong hệ thống của mình, và kết hợpchúng một cách tối ưu nhất

Tại Việt nam, do đây là một vấn đề mới, và rất khó để tìm hiểu nên chưa

có nhóm nghiên cứu cụ thể nào về các mẫu thiết kế, và chúng hầu hết được ápdụng theo phán đoán của người thiết kế, do ngôn ngữ mang tính trừu tượng caonên khó có thể áp dụng chúng một cách chính xác nhất để phát huy tính năng ưuviệt của nó Nhưng một khi đã áp dụng các mẫu này vào thiết kế thì người thiết

kế sẽ thấy rất thuận lợi và giảm thiểu công sức cũng như độ phức tạp đi rấtnhiều Hiểu và áp dụng các mẫu thiết kế này vào trong hệ thống cũng là một tiêuchuẩn quan trọng của các nhà lập trình viên ở các nước công nghệ phần mềmphát triển

Trang 3

1.2 Mục đích của đồ án.

Mục đích của đồ án trong đợt thực tập tốt nghiệp và đồ án tốt nghiệp lànghiên cứu cụ thể và chi tiết đến các vấn đề nhỏ của các mẫu thiết kế mà trongđợt thực tập tốt nghiệp chưa có điều kiện tiếp cận và tìm hiểu đến và hoàn thiệnmột cách căn bản các hiểu biết về Design Patern Đây là giai đoạn chuyển tiếpquan trọng và tiến hành các công việc áp dụng các mẫu thiết kế này vào trongthực tế, sử dụng các kiến thức đã nghiên cứu được cùng với các công cụ sẵn cónhư UML, C++, VC++ để thiết kế và áp dụng chúng một cách hoàn thiện và đầyđủ

Tuy nhiên, các mẫu thiết kế là một vấn đề rất khó, nó khó đối với cả nhữngchuyên gia lập trình đầy kinh nghiệm, và bản thân nó cũng rất trừu tượng, đòihỏi người tìm hiểu về nó phải có một kiến thưcs nhất định và rất cần thiết trênmột mảng rộng các vấn đề, đặc biệt là cần phải có giác quan phán đoán mà chỉ

có thể có được khi người đó có kiến thức vững về phần mềm, có kinh nghiệmchuyên sâu Do kinh nghiệm thực tế chưa có nhiều, và cũng chưa có một tài liệunào ở Việt Nam đã có nghiên cứu về vấn đề này, các tài liệu mà em tiếp xúccũng như tìm hiểu đều là dựa theo các thông tin trong nghiên cứu của các chuyêngia mà cụ thể là của bốn chuyên gia: Erich Gamma, Richard Helm, RalphJohnson và John Vlissides cùng với rất nhiều các nghiên cứu của các chuyên giakhác, và các dự án mà em tìm hiểu khi áp dụng các mẫu dự án này đều ở mứctrừu tượng cao, mà để hiểu được nó, chỉ có các nhà lập trình và thiết kế dày dặnkinh nghiệm mới có thể hiểu được chúng một cách cặn kẽ và đầy đủ nhất Vìvậy, trong đồ án này, em nghiên cứu tất cả 23 mẫu thiết kế mà được cụ thể hoá,

và được coi là đầy đủ cho khuôn dạng chung của phần mềm hiện đại, nhưng để

áp dụng được tất cả chúng là điều rất phức tạp, vì tuỳ vào từng dự án và từng hệthống cụ thể mà ta có thể áp dụng từng mẫu thiết kế một, hay là ta kết hợp nhuầnnhuyễn chúng để đưa ra hiệu quả cao nhất Trên thực tế, ở nước ngoài cũng như

ở Việt Nam, chưa có một dự án nào áp dụng đầy đủ 23 mẫu thiết kế này, và ởViệt Nam hiện nay cũng có ít công ty áp dụng chúng trong thiết kế Trong quátrình nghiên cứu và tìm hiểu, em có điều kiện thực tập, và được tạo điều kiệntham gia vào nghiên cứu và áp dụng một số mẫu trong thiết kế dự án của công tysản xuất phần mềm Khai Trí, và thấy được hiệu quả hơn hẳn khi áp dụng chúngvào trong thiết kế của dự án công ty

Đó là các mẫu:

Abstract FactorySingleton

Adapter

Trang 4

FacadeTemplate MethodState MethodFactory Method

Do đây là một dự án đươc phát triển và được nghiên cứu từ lâu, sản phẩmđưa ra thị trường và đã được chấp nhật một cách có hiệu qủa, và trong thực tế, nó

đã đáp ứng được yêu cầu đòi hỏi của phần mềm hiện đại Việc áp dụng các mẫuthiết kế này đã có kết quả cụ thể và thực tiễn trong sản phẩm của công ty

1.3 Việc nghiên cứu đồ án giải quyết điều gì

Như trên đã nói, các mẫu thiết kế là một vấn đề rất khó và rất trừu tượng, nókhông phải là dễ cho những người mới tìm hiểu lần đầu, nhưng không thể thiếunếu bạn muốn trở thành một chuyên gia lập trình

Nghiên cứu về các mẫu thiết kế trước hết là một nghiên cứu kỹ thuật phầnmềm mới Tất nhiên nhiên là nghiên cứu một cách cặn kẽ các vấn đề và chi tiếtnhỏ ở từng mẫu thiết kế một là có thể nắm được một cách cơ bản và có thể ápdụng thực tế được Kết quả của nghiên cứu này là một tài liệu làm việc về cácmẫu thiết kế, với các nội dụng cụ thể để giúp cho bạn có thể phần nào hiểu được

và phần nào áp dụng được trong thực tế Nhưng muốn tìm hiểu sâu hơn, thì cầnphải bằng chính khả năng của người cần tìm hiểu mới có thể rút ra được hiểubiết thấu đáo về các mẫu thiết kế

Sau đó là so sánh việc áp dụng các mẫu thiết kế này so với việc khi chưa ápdụng chúng Trong nhiệm vụ này có thêm yêu cầu tìm hiểu dự án cụ thể và để từ

đó thấy được khi áp dụng chúng thấy hiệu quả và phù hợp Đồng thời đưa rađược một dự án cụ thể khi áp dụng chúng, và chi tiết hoá từng phần khi áp dụng

và giải quyết vấn đề khi áp dụng các mẫu này

1.4 Việc giải quyết đồ án ở giai đoạn tốt nghiệp được thực hiện như thế nào?

Trong giai đoạn đồ án tôt nghiệp, em nghiên cứu thêm, vì đây là vấn đềkhó và phức tạp, trở ngại lớn nhất là chưa có một nghiên cứu cụ thể nào ở ViệtNam, và được tham gia khi áp dụng chúng vào trong một dự án cụ thể Trong lầnthực hiện này, em phải nghiên cứu sâu hơn về UML, các kiến thức về RationalRose, và các quy trình phần mềm Do kiến thức thực tế chưa có nhiểu và hạn chế

về thời gian để tìm hiểu về một dự án đã được phát triển từ lâu, cũng như thời

Trang 5

gian nâng cấp chúng nên hạn chế thời gian chưa sâu sắc vấn đề Và tôi chỉ tậptrung vào giải quyết một số mẫu trong dự án, phù hợp với dự án phát triển.Ngoài ra để áp dụng các mẫu thiết kế này còn yêu cầu rất nhiều nội dung nữa, tôichỉ thực hiện nghiên cứu lý thuyết và chỉ áp dụng phần nào lý thuyết vào thực tế,

và còn nhiều mẫu thiết kế chưa thể đưa vào dự án này được, đồng thời có ít điềukiện được nghiên cứu các dự án đã áp dụng các mẫu này ở Viêt nam cũng nhưcác phần mềm cụ thể khác

Trang 6

Chương 2 ĐẶT VẤN ĐỀ

Tóm tắt chương

Chương mở đầu này tôi xin được giới thiệu một số nét chung về đồ án tốtnghiệp mà tôi lựa chọn để thực hiện Đồng thời, trong phần này, tôi cũng trìnhbày một số nét tổng quan về đề tài của đồ án tốt nghiệp, về những lý do, động cơthúc đẩy nghiên cứu và tìm hiểu đề tài của tôi, về những mục đích đặt ra và yêucầu của đề tài mà tôi đã nghiên cứu thực hiện trong thời gian qua

2.1 Mục đích của đề tài

Như tên của đề tài đồ án “ Các mẫu thiết kế phần mềm hướng đối tượng

và áp dụng”, chính là thể hiện mục đích chính của đề tài Việc nghiên cứu các

mẫu dáng thiết kế không chỉ là nghiên cứu một kỹ thuật phân tích, thiết kế mới,

mà hơn thế nữa là phương pháp tiếp cận khoa học và giải quyết vấn đề theonhững phương pháp tối ưu hóa mà các chuyên gia phân tích , thiết kế và lập trình

đã xây dựng thành các mẫu cụ thể Nó giải quyết được những yêu cầu kiến thức

cơ bản đối với người áp dụng và thiết kế theo các mẫu cũng như cần phải nắm rõhơn để thiết kế tốt hơn, đáp ứng được yêu cầu của xu thế phát triển phần mềmhiện nay

2.2 Giới thiệu bài toán, nhiệm vụ của đề tài

Nhiệm vụ của đề tài có hai phần rất rõ ràng đó là :

 Nghiên cứu về Mẫu thiết kế

 Áp dụng Mẫu thiết kế đã nghiên cứu vào giải quyết một dự án và một số bàitoán con

Về lý thuyết nghiên cứu về Mẫu thiết kế, tôi xin trình bày tổng quan về tưtưởng chính mang tính cốt lõi của các tác giả để phát triển và hình thành nênMẫu thiết kế Do Mẫu thiết kế không đơn thuần là một công nghệ mớI mà nóthực sự là một hướng tiếp cận mớI và đầy đủ cho các nhà lập trình và phân tíchthiết kế Vì Mẫu thiết kế chỉ thích hợp vớI các ngôn ngữ lập trình hướng đốI

Trang 7

tượng và cách phân tích thiết kế hướng đốI tượng Trong khi sử dụng, nó khôngtách khỏI UML, cũng đã cho ta cách ứng dụng trực tiếp các mẫu thiết kế này.

Về phần áp dụng Mẫu thiết kế vào thực hiện một dự án, tôi xin trình bàynộI dung của dự án lớn và phần thực hiện của tôi trong dự án lớn đó, là một phầncủa dự án nhỏ Qua đó để bạn đọc xem được tổng quan về dự án lớn và nắmđược chi tiết các ưu điểm của dự án này khi áp dụng Mẫu thiết kế vào thiết kế sovớI dự án khi áp dụng kiểu phân tích thiết kế cũ, cũng như nhìn ra được cáchthiết kế giúp cho dự án được nâng cấp lên dựa trên bản thiết kế cũ Dựa vào cácthiết kế dự án cụ thể này mà ta có thể nhìn thấy rõ ràng cách thiết kế dựa trênMẫu thiết kế và những ưu điểm của nó

2.3 Lý do chọn đề tài.

Làm phần mềm không chỉ là lập trình, tạo mã một cách đơn thuần để cuốicùng ra một chương trình có khả năng chạy được Điều đó chỉ thích hợp với các

dự án thật nhỏ, và rất nhỏ, hay đúng hơn là các chương trình đơn giản Với các

dự án phần mềm còn có rất nhiều điều quan trọng hơn thế, ở mức phân tích thiết

kế, ở mức quản lý, phối kết hợp các nguồn nhân lực trong dự án một cách hiệuquả và thực tế thành công của các dự án phần mềm ngày càng nhiều phụ thuộcvào các yếu tố đó Và cũng có nhiều lý thuyết, tư tưởng ra đời để thực hiện cáccông việc đó, đó là các mẫu thiết kế, hay còn gọi là Mẫu thiết kế

Trong nhà trường, tôi đã được học về phân tích thiết kế có cấu trúc, việcnghiên cứu thực sự sâu sắc về một phân tích thiết kế mới trong một dự án cụ thể

là không có điều kiện , do hạn chế về thời gian Và do nhận thức dự án, tầm quantrọng của thiết kế hướng đốI tượng đối với các dự án phần mềm, nên tôi chọn đềtài “Mẫu dáng thiết kế Mẫu thiết kế và ứng dụng” là đề tài tốt nghiệp của mình.Với tất cả các kiến thức cơ sở đã được học trong nhà trường cùng sự hướng dẫncủa thầy, cũng như sự hướng dẫn nhiệt tình của project manager của công ty sảnxuất phần mềm Khai Trí tôi cố gắng, tìm hiểu nghiên cứu Mẫu thiết kế, là nhữngmẫu thiết kế được áp dụng nhiều và rất hiện đại hiện nay Điều này, đối với mộtsinh viên chưa có thực tế thì hơn khó khăn vì nghiên cứu và hiểu các mẫu thiết

kế và tham gia vào dự án cụ thể trong thực tế thì ngoài yêu cầu kiến thức ở mứcnhất định thì cần thiết phải có những trải nghiệm thực tế Tuy nhiên, điều đó chỉ

là yếu tố khách quan, trong thời gian qua, được sự hướng dẫn tận tình của thầygiáo Phạm Đăng Hải, bộ môn khoa học máy tính, khoa Công nghệ thông tin,trường Đại học Bách Khoa Hà Nội, và sự cố gắng của bản thân, tôi đã thực hiệnhoàn thành đề tài Với việc nghiên cứu các mẫu thiết kế Mẫu thiết kế và ứngdụng nó vào thực tế, tôi nghĩ đó là một bước chuyển tiếp nghiên cứu rất quantrọng, từ hàn lâm sang công nghiệp, là bước chuẩn bị quan trọng Do đó, theo tôinghĩ đây là một đề tài rất hay, và thiết thực, và rất tin tưởng thực hiện đề tài này

Trang 8

Chương 3 TỔNG QUAN VỀ MẪU THIẾT KẾ

3.1 Lịch sử về mẫu dáng thiết kế.

Theo các nghiên cứu của các chuyên gia trong việc thuận lợi của ngôn ngữ

đã chỉ ra rằng kiến thức và kinh nghiệm không thể được tổ chức đơn giản xoayquanh vấn đề cú pháp Nhưng trong các cấu trúc khái niệm lớn hơn như thuậttoán, cấu trúc dữ liệu thì cần được lập kế hoạch và thiết kế một cách hoàn thiện.Người thiết kế không nghĩ đến cú pháp mà họ đang sử dụng để thiết kế nhiềunhư khi họ cố ghép các thiết kế hiện tại mà không phù hợp vớI thuật toán, cấutrúc dữ liệu và các căn bản ăn sâu mà họ đã học

Các nhà khoa học máy tính đã đặt tên và sắp xếp các thuật toán, cấu trúc dữliệu nhưng họ không thường đặt tên cho các mẫu khác Mẫu thiết kế cung cấpmột từ vựng chung cho các nhà thiết kế để kết nốI, lập tài liệu và tìm hiểu thiết

kế mới Mẫu thiết kế làm cho hệ thống đơn giản hơn bằng cách hiểu nó dựa trênmức trừu tượng hoá cao hơn là các ký pháp thiết kế hoặc ngôn ngữ lập trình.Mẫu thiết kế làm tăng mức độ thiết kế giúp các thành viên trong một nhóm

có thể dễ dàng hiểu và thảo luận cùng nhau trong một vấn đề cần giải quyết.Biết được các mẫu dáng thiết kế giúp cho ta hiểu dễ dàng về các hệ thốnghiện tại Hầu hết các hệ thống hướng đối tượng sử dụng các mẫu thiết kế này.Những người nghiên cứu chương trình hướng đốI tượng thường phàn nàn rằngcác hệ thống đã từng nghiên cứu hoặc thực hiện sử dụng tính kế thừa rất phứctạp khó có thể kiểm soát được chúng Thực tế xảy ra rất nhiều vì họ không hiểuđược các mẫu thiết kế trong hệ thống

Các mẫu dáng thiết kế giúp người nghiên cứu trở thành một nhà thiết kếgiỏi hơn, hơn thế nữa, mô tả hệ thống theo các mẫu thiết kế sẽ làm cho hệ thống

dễ hiểu hơn Do có vốn từ vựng chung nên bạn không phải mô tả toàn bộ cácmẫu thiết kế, chỉ cần đặt tên cho mẫu thiết kế đó, thì người đọc sẽ hiểu rõ ràng

về vấn đề đó như thế nào?

Chúng ta sử dụng chúng để đặt tên cho các lớp, để nghiên cứu tốt hơn vàthiết kế để mô tả các mẫu thiết kế

3.1.1 Mục đích của các mẫu thiết kế.

Giúp cho người thiết kế tái sử dụng lại thành công bởi việc dựa trên nềnthiết kế mới và kinh nghiệm Một nhà thiết kế áp dụng chúng và hiểu đượcchúng nhanh chóng mà không cần phải tìm hiểu và thiết kế lại chúng Làm chotái sử dụng lại các thiết kế và phân tích tốt hơn

Trang 9

Mẫu thiết kế là một kỹ thuật mới giúp cho người phát triển của hệ thốngmới dễ dàng truy nhập hơn Mẫu thiết kế giúp cho việc lựa chọn thiết kế có thứ

tự làm cho hệ thống tối ưu và tránh được những rủi ro không đáng có

3.1.2 Các mẫu thiết kế giải quyết vấn đề như thế nào?

Tìm kiếm đối tượng thích hợp: Cái khó của phân tích thiết kế hướng đốitượng là phân tích hệ thống thành các đối tượng, chúng đều ảnh hưởng đếnphân tích, thường xuyên phương pháp hoá cách tiếp cận

Xác định tính chất của đối tượng: Các đối tượng có thể biến đổi lớn về sốlượng và kích cỡ, chúng có thể biểu diễn mọi thứ, và có thể tổng thể ứngdụng lựa chọn các đối tượng như thế nào để phù hợp bài toán và khả năngchia nhỏ đối tượng lớn thành các đối tượng nhỏ hơn, là một vấn đề cần phải

có quyết định đúng

Định nghĩa giao diện đối tượng: Mẫu thiết kế giúp xác định giao diện bằngcách nhận dạng các khoá thành phần của nó và các dạng dữ liệu được nhậnbiết qua giao diện

Mẫu thiết kế còn xác định mối quan hệ giữa các giao diện Đặc biệt chúngcòn yêu cầu một số lớp có giao diện tương tự nhau, hoặc chúng định vị trí cácràng buộc trong giao thức của những lớp này

Xác định các thực hiện đối tượng: Cách thực hiện của đối tượng được thôngqua các lớp của nó Một lớp được chỉ ra dữ liệu bên trong đối tượng và biểudiễn , xác định các thao tác các đối tượng thực hiện

Lớp và giao thức kế thừa: Theo quy tắc: Programming to an Interface, not anImplementation

Vấn đề tái sử dụng và tham số hoá các dạng Mẫu thiết kế

3.1.3 Các phương pháp để chọn các mẫu thiết kế

Phải tìm được các Mẫu thiết kế nào là phù hợp với vấn đề nhất, do đó cómột số cách tiếp cận sau:

Đi đến quyết định các Mẫu thiết kế giải quyết vấn đề như thế nào?

Kiểm tra các nội dung mục đích cần sử dụng

Nghiên cứu các mẫu có liên quan với nhau như thế nào

Nghiên cứu các mẫu phù hợp với mục đích

Kiểm tra nguyên nhân thiết kế lại

Xem xét những vấn đề có thể thay đổi trong thiết kế của bạn

Trang 10

3.1.4 Làm thế nào để thiết kế một mẫu thiết kế

Khi chọn được Mẫu thiết kế làm thế nào để sử dụng ?

Nghiên cứu về mẫu đó

Nghiên cứu các thành phần cấu trúc và các vấn đề liên quan

Lựa chọn các tên cho các phần mẫu mà hiệu quả trong ngữ cảnh

Xác định các lớp Khai báo giao diện, xác lập quan hệ thừa kế và xác định cáctrường hợp biến biểu diễn dữ liệu và kết quả đối tượng Nhận dạng các lớphiện có trong ứng dụng của bạn mà mẫu sẽ tác động sửa đổi chúng cho phùhợp

Xác định ứng dụng, các tên đặc trưng cho các thao tác trong mẫu

Thực hiện các thao tác để đưa ra quyền hạn trách nhiệm và cộng tác trong cácmẫu

3.2 Các mẫu dáng thiết kế (Mẫu thiết kế)

3.2.1 Khái quát chung về Mẫu thiết kế.

Mẫu thiết kế định tên, thúc đẩy và giải thích một cách có hệ thống các thiết kế mà được địa chỉ hoá trong hệ thống hướng đối tượng Nó mô tả vấn đề, giải pháp, khi áp dụng các giải pháp và các kết quả của nó Nó cũng nêu ra các gợi ý và các ví dụ cụ thể trong từng bước thực hiện Giải pháp là sự sắp sếp các đối tượng và các lớp để giải quyết vấn đề Giải pháp được tuỳ biến và thực hiện để giải quyết các vấn để trong từng ngữ cảnh riêng biệt.

Chúng tôi chia các mẫu thiết kế theo hai tiêu chí Tiêu chí đầu tiên, là mục đích, ánh xạ những vấn đề mà mẫu thiết kế thực hiện Các mẫu có thể thuộc vào một trong những mục đích như khởi tạo, cấu trúc và hoạt động

Các mẫu khởi tạo liên quan đến quá trình tạo đối tượng, các mẫu cấu trúc( structural mẫu) giải quyết thành phần của các lớp và các đối tượng Các mẫu hoạt động( behavioral mẫu) cụ thể hoá phương pháp mà các lớp và các đối tượng thực hiện và phân quyền trách nhiệm.

Theo tiêu chí thứ hai, là phạm vi (scope), định nghĩa liệu mẫu áp dụng đầu tiên vào các lớp các đối tượng Các mẫu class giải quyết mối quan hệ giữa các lớp và các lớp con của nó Mối quan hệ này được thiết lập thông

Trang 11

qua tính kế thừa, nên chúng được gắn kết tĩnh tại thời gian biên dịch Các mẫu đối tượng giải quyết mối quan hệ giữa các đối tượng, mà có thể được thay đổi tại thời gian chạy và chúng linh động hơn Hầu hết các mẫu sử dụng tính kế thừa ở một số khía cạnh nào đó Nên chỉ có mẫu mang tên là “ các mẫu lớp” là tập trung vào mối quan hệ giữa các lớp Còn lại hầu hết các mẫu đều thuộc vào phạm vi đối tượng.

Có nhiều cách tổ chức thành các mẫu Và một số mẫu được sử dụng cùng nhau để làm trong sáng thiết kế Sử dụng mẫu nào còn phụ thuộc vào công việc bên trong mà chúng thực hiện, chúng so sánh, và khi nào thì áp dụng chúng.

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 đốitượ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àothà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ếnthứ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ì đã đượctạo ra, ai tạo ra chúng, nó được tạo ra như thế nào, và khi nào thì tạo rachú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 gianchạ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

Trang 12

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ự áncủ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ẫunà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ụngchúng vào trong thiết kế dự án cũng như từng phần của dự án thì thu đượcnhữ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ệnnhư là Motif và Presentation Manager Các thể hiện và hoạt động khácnhau 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ácwidget 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ủawidget 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 giaodiện cho việc tạo từng loại cơ bản trong widget Cũng có một lớp ảo chotừng loại trong widget, và các lớp con thực hiện cài đặt các widget Giaodiện WidgetFactory có một thao tác trả về một đối tượng widget cho từnglớp widget ảo Các client gọi những thao tác này để sử dụng các thể hiệnwidget, 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àmCreateScrollBar trong MotifWidgetFactory thể hiện và trả về một Motifscroll 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 đơnnhất thông qua giao diện WidgetFactory và các lớp cài đặt các widget chochúng

Trang 13

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ảotext Motif, và ràng buộc này phải tự động tuân theo như kết quả khi sử dụngMotifWidgetFactory.

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 ragiao diện của chúng, mà không cần đưa ra cách cài đặt của chúng

Client

AbstractProductA

ProductA2 ProductA1 AbstractProductB

ProductB2 ProductB1

Trang 14

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 đốitượ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ảnphẩm

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

o 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 gianchạy, concrete factory này tạo các đối tượng sản phẩm cài đặt trường hợpriêng biệt Để tạo các đối tượng sản phẩm khác nhau, client có thể sử dụngmộ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 conConcrete Factory

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ủaConcrete 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ộtcách đơn giản bằng cách thay đổi concrete factory Do một abstractfactory 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ượngsản phẩm trong một họ được thiết kế để làm việc cùng nhau, điều quan

Trang 15

trọng là một đối tượng sử dụng các đối tượng chỉ từ một họ, tại mộtthờ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ácfactory 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ảnphẩ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ảiquyế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ủaConcrete Factory cho mỗi họ sản phẩm Trong trường hợp này nêndùng mẫu Singleton

Tạo các sản phẩm : Abstract Factory chỉ khai báo một giao diện choviệ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ĩamộ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ẩmthường được AbstractFactory định nghĩa một thao tác khác nhau Cácloại sản phẩm được mã hoá trong các thao tác ký pháp Do vậy, thêmmột loại mới của sản phẩm yêu cầu sự thay đổi giao diệnAbstractFactory và tất cả các lớp con phụ thuộc vào nó Một giải phápthiế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 thaotá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 đốitượ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ưngchú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.

Trang 16

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ăngchuyể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 đổinày,dưới dạng chuyển đổi thẻ bài Các đối tượng TextConverter là có tráchnhiệ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ộtthẻ bài trong từng định dạng một Các lớp con của TextConverter chỉ ratrong 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áchthuậ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ể độclậ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ắpghé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 đốitượng mà nó xây dựng

ConcreteBuilder

Trang 17

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

o 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ệnBuilder

Product

o 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

o Bao hàm các lớp mà định nghĩa các phần hợp thành, baogồ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

Trang 18

Cho phép thay đổi biểu diễn bên trong của sản phẩm Đối tượng Buidercung cấp cho director một giao diện trừu tượng để xây dựng sản phẩmGiao diện này cho phép ẩn đi cách biểu diễn và cấu trúc trong của sảnphẩm, cũng ẩn sản phẩm đã lắp ghép như thế nào từ các thành phần cấuthà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ínhmodul 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ếtmột lần và các director có thể sử dụng lại để xây dựng các biến thể kháccủ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áccreational 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ủadirector 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âydự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ừngthành phần, director có thể hỏi đến nó để tạo Lớp ConcreteBuilder ghilồ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úngtheo 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ữngtrường hợp chung chung, các sản phẩm tạo ra bởi các builder concretekhá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ànhviên chức năng ảo Chúng được định nghĩa như một phương pháp rỗng,

Trang 19

cho phép các client ghi đè chỉ khi các thao tác mà chúng liên quan mậtthiế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âydựng các đối tượng phức tạp Cái khác nhau trước hết là Builder mẫu tậptrung vào việc xây dựng một đối tượng phức tạp từng bước một Tầmquan 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ảnphẩm được đưa ra một cách trực tiếp và nhanh chóng (get returnedimmediately)

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ữacá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 documenttới user Hai lớp trừu tượng chính trong framework này là các lớpApplication và Document Cả hai lớp này là trừu tượng, và các client phảiphâ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

Trang 20

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

Các lớp con Application định nghĩa lại một thao tác CreateDocumenttrừ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

ConcreteCretor FactoryMethod

Product=FactoryMethod()

Return new CreteProduct

Trang 21

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 factorymethod để 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

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ớpvới một factory method hữu hiệu hơn là tạo một đối tượng một cách trựctiếp Factory method đưa cho các lớp con một kết nối để cung cấp mộtphiê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ếtquả 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ườnghợ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 địnhcà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à factorymethod 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ớifactory method là phải phân lớp khi tạo các đối tượng Product tương thích class Creator {

public:

Trang 22

template <class TheProduct>

Product * StandardCreator<TheProduct>:: CreatorProduct(){

return new TheProduct;

Đặ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 Factorymethod 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ườngyê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 thaotác

Trang 23

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.

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ộtlớp Tool ảo cho việc định nghĩa các công cụ giống các thao tác trong bảngcông cụ Framework cũng định nghĩa trước một lớp con GraphicTool chocá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áclớp cho các ghi chú và các đoạn chỉ ra phần ứng dụng, nhưng lớpGraphicTool 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ệcphâ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 Graphicmớ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

Trang 24

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 conGraphic thwcj hiện thao tác Clone, sau đó GraphicTool có thể nhân bảnbấ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ảntớ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ặcphâ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 giankhá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ó đượctạ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ớibiể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ạngthá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ớimỗi thời điểm của trạng thái

Trang 25

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

Đị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ốngbiến đổi động cao cho phép bạn định nghĩa hoạt động mới thông qua thànhphầ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

Client

Operation()

Prototype Clone()

P= prototype->Clone()

Return cocy of sell Return cocy of sell

ConcretePrototype1 Clone()

ConcretePrototype2 Clone()

Trang 26

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ớpmớ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ệctạ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ủacác đối tượng client Một client có thể đưa ra một hoạt động mới bằng cáchgá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 ứngdụ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ảocho 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úcphứ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òngcon đã đị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ẫuthay vì yêu cầu một factory method để tạo đối tượng mới

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ườnghợp, như chúng ta đã thảo luận tại cuối phần này Chúng có thể được sử dụngcù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

Làm thế nào để đảm bảo rằng một lớp chỉ có thể có một thể hiện và thể hiện

đó có thể truy xuất dễ dàng? Một biến toàn cục làm cho một đối tượng có

Trang 27

thể được truy xuất tại mọi nơi, nhưng không đảm bảo cho việc tạo ra nhiềuthể hiện của lớp đó

Giải pháp tốt nhất là bản thân lớp đó có nhiệm vụ theo dõi thể hiện duy nhấtcủa nó Lớp đó có thể đảm bảo rằng không có thể hiện nào khác có thể đượctạo ra, và nó có thể cung cấp cách truy xuất đến thể hiện Dạng mẫu nàyđược gọi là mẫu Singleton

Return uniqueInstance

Trang 28

3.2.3.7 Kết quả :

Điều khiển truy cập tới một trường hợp duy nhất Vì lớp Singleton baogói thể hiện duy nhất của nó Nên nó có thể có giới hạn điều khiển việccác client truy xuất đến nó như thế nào và khi nào

Giảm thiểu không gian tên.( được cải thiện dựa trên các biến toàn cục,

Nó tránh được trùng lặp về không gian tên với các biến toàn cục màlưu trong trường hợp đơn nhất.)

Cho phép cải tiến và làm mịn các thao tác và biểu diễn Do lớpSingleton có thể tạo ra các lớp con của nó, nó dễ được định dạng mộtứng dụng với một thể hiện của lớp được mở rộng này Bạn có thể địnhdạng một ứng dụng với thể hiện của lớp bạn cần tại thời gian chạy.Cho phép số lượng biến của các thể hiện, tức là cho phép tạo ra một sốlượng có thể thay đổi các thể hiện

Thuận tiện hơn các thao tác lớp, tạo sự mềm dẻo khi thao tác với cáclớp, Không nhất thiết là tạo ra thể hiện duy nhất Mẫu Singleton chophép tạo nhiều hơn một thể hiện, hơn nữa với hướng tiếp cận như vậy

có thể điều khiển được số lượng thể hiện mà ứng dụng sử dụng Chỉmỗi hàm cho phép truy xuất đến thể hiện của Singleton là phải thayđổi

3.2.3.8 Cài đặt

Đảm bảo một trường hợp duy nhất Cách chung nhất để thực hiện điềunày là ẩn đi hàm tạo và thể hiện dưới dạng một hàm của lớp( hoặc làmột chức năng tĩnh hoặc một class method) Điều đó đảm bảo chỉ mộtduy nhất một thể hiện được tạo ra, hàm đó truy xuất đến biến có thểhiện duy nhất và nó chắc chắn rằng biến đó được khởi tạo với thể hiệnduy nhất truóc khi trả về giá trị của nó

Lớp Singleton được khai báo như sau:

Trang 29

Phân lớp con trong lớp Singleton.

3.2.3.9 Các mẫu liên quan

Một số mẫu có thể được thực hiện bằng việc sử dụng Singleton mẫu.(Abstract factory, Builder, và Prototype)

Kết luận: Như vậy có hai cách để tham số hoá hệ thống bởi các lớp đối

tượng nó tạo ra Cách một là sắp xếp các lớp tạo đối tượng, việc này chophép sử dụng mẫu Factory Method Mặt hạn chế chính của bước này là nó

có thể yêu cầu tạo một lớp con mới để thay đổi lớp của sản phẩm Sự thayđổi này có thể là trường hợp thay thế

Một mặt khác để tham số hoá hệ thống là dựa trên nhiều thành phần kếtcấu đối tượng Xác định một đối tượng chức năng đối với việc nhận biếtlớp của sản phẩm đối tượng, và nó làm cho nó tham số hoá hệ thống Đây

là khía cạnh chủ yếu của Abstract Factory, Builder và Prototype Ba mẫusnày liên quan đến việc tạo một đối tượng factory mới mà tính năng của nó

là để tạo ra các đối tượng sản phẩm Abstract Factory có đối tượng factorytạo đối tượng thuộc một số lớp

Trong khung soạn thảo, Factory method là cách dễ nhất để sử dụng đầutiên Nó rất dễ để xác định một lớp con mới

Trang 30

3.2.4 Các mẫu cấu trúc(Structural Mẫu)

Các mẫu cấu trúc được quan tâm về các lớp và các đối tượng như thế nào

để hợp thành một cấu trúc lớn hơn Các mẫu lớp cấu trúc đều dùng tính kếthừa để tạo giao diện hoặc thực hiện Structural đối tượng mô tả các phươngpháp để tạo các đối tượng thu được nhiều chức năng mới Giữa các mẫu cấutrúc có các thành phần giống nhau, đặc biệt là thành phần tham gia và cộngtác của chúng Điều này là có thể vì các mẫu cấu trúc dựa trên một bộ nhỏgiống nhau của các cơ chế ngôn ngữ về mã cấu trúc và sự vật

Có thể chia chúng thành 2 loại:

Structural class pattern: Sử dụng tính kế thừa để tạo các giao diện hay cácthực hiện: ví dụ, ta thừa kế trộn 2 hay nhiều lớp thành một lớp Lớp tạo rachứa tất cả các thuộc tính của các lớp cha của nó

Structural object pattern: là phương pháp để hợp các đối tượng để thực hiệnchức năng mới

Trong các mẫu cấu trúc có các mẫu mà tôi đã nghiên cứu sau:

Chuyển đổi giao diện của một lớp sang giao diện khác mà client muốn

Cho phép các lớp có giao diện không tương thích làm việc với nhau.

3.2.4.1.2 Ví dụ:

Một soạn thảo đồ hoạ, giúp người dùng có thể vẽ hoặc sắp xếp cácthành phần đồ hoạ như là đường thẳng, text, đa giác vào các tranh vẽhoặc các biểu đồ Vấn đề trừu tượng chính của soạn thảo vẽ ở đây là đốitượng đồ hoạ, hình dáng có thể tự sửa đổi được Giao diện cho các vấn đề

Trang 31

đồ hoạ ở đây được định nghĩa bởi một lớp trừu tượng gọi là Shape Soạnthảo vẽ định nghĩa một lớp con của Shape cho từng loại như LineShapecho đường kẻ, PolygonShape cho đa giác

Các lớp ứng với các hình dáng hình hoạ cơ bản như LineShape,PolygonShape là đơn giản hơn trong việc cài đặt vì các khả năng vẽ vàsửa đổi của chúng là hạn chế Nhưng một lớp con TextShape cho phéphiển thị và sửa đổi text rất khó cài đặt, do việc sửa đổi text đến các phépcập nhật màn hình quản lý bộ đệm phức tạp

Trong khi đó, bộ dụng cụ trong giao diện người dùng cung cấp lớpTextView cho hiển thị và soạn thảo Ở đây ta muốn sử dụng lại TextView

để thực hiện TextShape, nhưng dụng cụ không được thiết kế với Shapenên không thể sử dụng đối tượng TextView và TextShape một cách tíchhợp

Như vậy yêu cầu ở đây đặt ra là làm thế nào để các lớp sẵn có vàkhông liên quan như TextView và TextShape có thể làm việc với nhautrong khi giao diện không tương thích với nhau

Một giải pháp đặt ra là có thể thay đổi lớp TextView để cho nó phùhợp với giao diện Shape, nhưng sẽ không thực hiện nếu không có mãnguồn trong bộ dụng cụ Chính vì thế, thay vì định nghĩa TextShape đểthích ứng với giao diện TextView với giao diện Shape Chúng ta có thểđịnh nghĩa điều này theo 2 cách: bằng cách kế thừa giao diện Shape vàthực hiện TextView hoặc kết nối thể hiện TextView vào một TextShape

và cài đặt TextShape dưới dạng giao diện của TextView Cả hai phươngpháp này tương ứng với hai phiên bản của mẫu Adapter: class Adapterpattern, và Object Adapter Pattern

Cần sử dụng một số các lớp con hiện hành, nhưng nó được ứng dụngtrong thực tế để điều hợp giao diện của chúng bằng việc phân lớp Mộtđối tượng Adapter có thể điều hợp giao diện của lớp cha

3.2.4.1.4 Cấu trúc:

Trang 32

Phương pháp I: Một lớp adapter sử dụng tính kế thừa để thíc ứng một giaodiện tới giao diện khác.

Một đối tượng adapter dựa trên tổ hợp đối tượng

3.2.4.1.5 Thành phần:

Target : định nghĩa giao diện domain-specific mà Client sử dụng

Client : Cộng tác với các đối tượng tuân theo giao diện Target

Adaptee : Định nghĩa một giao diện có sẵn cần thiết cho việc thích nghi Adapter:Giao diện này cần phải sửa đổi cho phù hợp với giao diện Target

Trang 33

3.2.4.1.7 Kết quả

Class Adapter và object Adapter có nhiều yếu tố để đánh giá khác nhau

để đạt được hiệu quả tốt nhất Việc làm cho Adapter tương thích vớiTarget được làm cho một lớp cụ thể Dẫn đến, một lớp adapter sẽ khônghoạt động khi chúng ta muốn điều hợp một lớp và các lớp con của nó.Điều hợp Adapter tới Target bằng cách chuyển đến lớp Adapter cụ thể Cho phép Adapter ghi đè một số hoạt động của Adapter, từ khi Adapter làmột lớp con của Adaptee

Giới thiệu duy nhất một đối tượng, và không cần điểm gián tiếp nào đểnhận đến adaptee

Một đối tượng adapter:

Cho phép một adapter làm việc với nhiều adaptee

Làm cho khó ghi đè các hàm của Adaptee hơn, nó yêu cầu tạo lớp conAdaptee và bắt Adapter tham chiếu đến lớp con chứ không phải là bảnthân Adaptee

Một số vấn đề khi sử dụng Adapter mẫu:

Adapter biến đổi trong một lượng công việc chúng thực hiện để tươngthích Adatee tới giao diện Target Adapter là không trong suốt với client

3.2.4.1.8 Cài đặt

Cài đặt lớp Adater trong C++ : Adapter có thể kế thừa chung từ Target

và riêng từ Adaptee Do đó Adapter là một dạng con thuộc Target chứkhông thuộc Adaptee

Sử dụng các thao tác trừu tượng

Sử dụng các đối tượng thành phần

Các Adapter đã được tham số hoá

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

Bridge có cấu trúc tương tự như một đối tượng adapter, nhưng Bridge

có nội dung khác: Nó được hiểu là để phân chia một giao diện từ việcthực hiện của nó nên có thể biến đổi rõ ràng và độc lập Một adapterđược hiểu là để thay đổi một giao diện của đối tượng sẵn có

Decorator tăng cường đối tượng khác mà không cần thay đổi giaodiện của nó Một Decorator vì thế sẽ trong suốt hơn đối với ứng dụng

Trang 34

hơn là một adapter Từ đó đưa ra kết quả, Decorator hỗ trợ các thànhphần đệ quy, mà nó không có hỗ trợ cho một adapter trong suốt.

Proxy định nghĩa một biểu diễn hoặc thay thế cho đối tượng khác vàkhông thay đổi giao diện của nó

3.2.4.2 Bridge mẫu

3.2.4.2.1 Mục đích

Phân tách việc trừu tượng hoá khỏi các cài đặt của chúng để cho

cả hai có thể biến đổi một cách độc lập.

3.2.4.2.2 Ví dụ

Việc cài đặt của vấn đề trừu tượng hoá trong cửa sổ Window trong bộ dụng

cụ giao diện người dùng, cho phép các user có thể ghi các ứng dụng làmviệc trong cả hai hệ thống X Window System và Presentation Manager Sửdụng tính kế thừa, chúng ta định nghĩa một lớp Window, các lớp conXWindow và PMWindow cài đặt giao diện Window cho các nền khácnhau

Nhưng chính phương pháp này có hai điều hạn chế lớn nhất, đó là:

- Không thuận tiện khi mở rộng Window để bao hàm các dạng

khác của window hoặc các nền mới Tưởng tượng là một lớpcon IconWindow của Window chỉ ra bởi các icon trongWindow Để hỗ trợ Icon Window cho cả hai nền này, chúng tacài đặt 2 lớp mới, XIconWindow và PMIconWindow Trongtrường hợp xấu nhất, chúng ta sẽ định nghĩa 2 lớp cho mọi cửa

sổ Như vậy cần một nền thứ 3 yêu cầu lớp con Window mớicho tất cả các dạng cửa sổ

- Làm cho mã nguồn Client độc lập với nền Bất kỳ khi nào client

tạo một cửa sổ, nó khỏi tạo một lớp thực hiện, mà nó chỉ ra càiđặt Trong trường hợp này, ạo một đối tượng XWindow kết nốivới Window cho việc cài đặt X Window, tạo mã nguồn clientđộc lập với cài đặt X Window, chính vì thế, nó rất khó đểchuyển mã nguồn client tới các nền khác

Khi áp dụng mẫu Bridge, nó lập địa chỉ những vấn đề này bằng cáchđặt Window và cài đặt của nó trong biểu đồ lớp phân chia Chỉ có mộtlớp kế thừa cho các cửa sổ giao diện (Window, IconWindow,TransientWindow) và biểu đồ lớp phân chia cho các cài đặt cửa sổ chỉ

Trang 35

ra nền, coi WindowImp là gốc Lớp con XWindowImp cung cấp một

cài đặt dựa trên X Window System

Tất cả các lớp con Window được cài đặt trong các thao tác ảo từ giao

diện WindowImp Điều này tách riêng các cửa sổ khỏi các cài đặt Mối

quan hệ giã Window và WindowImp như một cầu nối, do nó bắc cầu

giữa vấn đề trừu tượng này và việc cài đặt của nó, cho phép chúng biến

đổi một cách độc lập

3.2.4.2.3 Ứng dụng

Cần tránh một kết nối cố định giữa vấn đề ảo và việc cài đặt của nó

Cả vấn đề ảo và việc cài đặt của nó có thể mở rộng việc phân lớp con

Trong trường hợp này Bridge cho phép bạo tổ hợp các vấn đề ảo và các

cài đặt khác nhau và mở rộng chúng một cách độc lập

Thay đổi cài đặt của một vấn đề ảo có thể không ảnh hưởng đến client;

có nghĩa là mã của chúng không cần phải dịch lại

Muốn ẩn việc thực hiện của vấn đề ảo hoàn toàn từ các client

Muốn dùng chung cài đặt giữa nhiều đối tượng, và điều này có thể

Abstraction Operation()

RelinedAbstraction

imp->OperationImp()

ConcreteimplementorAOperationImp()

ConcreteimplementorB OperationImp()

Trang 36

o Duy trì một tham chiếu tới một đối tượng của dạngImplementor.

cơ bản, và Abstraction định nghĩa các thao tác mức cao dựatrên những ưu tiên này

Khả năng mở rộng được cải thiện Có thể mở rộng biểu đồ Abstraction

Trang 37

Abstract Factory có thể tạo và cấu hình một phần Bridge.

Adapter mẫu lớn hơn toward việc tạo các lớp không phụ thuộc làm việccùng nhau Nó thường được áp dụng vào hệ thống sau khi chúng đã đượcthiết kế Bridge, trong một khía cạnh nào đó, được sử dụng up-front trongthiết kế để cho phép các trừu tượng hoá và việc cài đặt biến đổi một cáchđộc lập

3.2.4.3 Composite

3.2.4.3.1 Mục đích

Tạo nên một cách tổng thể các đối tượng thành cấu trúc cây để biểu diễn các hệ thống part-whole Composite cho phép các client sử dụng các đối tượng và các thành phần riêng lẻ của các đối tượng thống nhất.

3.2.4.3.2 Ví dụ

Ứng dụng đồ hoạ như soạn thảo vẽ và hệ thống biểu diễn dưới dạng bản đồcho phép người dùng xây dựng một biểu đồ phức tạp từ những thành phầnđơn giản Người dùng có thể nhóm các thành phần để tổ chức thành thànhphần lớn hơn Một cách thực hiện đơn giản là có thể định nghĩa các lớp chocác mẫu đồ hoạ như Text, Line, và các lớp có các hoạt động này

Khi sử dụng phương pháp này, sẽ xuất hiện một vấn đề: Mã nguồn mà sửdụng các lớp này phải xử lý được màu gốc và các đối tượng trong nội dung

đó một cách khác nhau Để phân biệt những đối tượng này sẽ làm cho hệthống phức tạp hơn Mẫu Composite mô tả làm thế nào để sử dụng thànhphần đệ quy nên các client không cần phải tạo sự khác biệt đó

Nhưng vấn đề chủ yếu ở đây là: một lớp ảo biểu diễn cả gốc và nội dungcủa nó Đối với hệ thống đồ hoạ, lớp này là Graphic, Graphic khai báo cácthao tác Draw, dùng để chỉ ra các đối tượng đồ hoạ Nó cũng khai báo cácthao tác mà tất cả các thành phần của nó sử dụng chung, ví dụ như thao táctruy xuất và quản lí các lá con của nó

Các lớp con như là Line, Rectangle, và Text, định nghĩa các đối tượng đồhoạ cơ bản Những lớp này cài đặt thao tácDraw để vẽ các đường, hình chữnhật, và dạng text, từ đó các đối tượng đồ hoạ cơ bản không có các đồ hoạcon, không có lớp con nào trong số đó cài đặt các thao tác con- quan hệ

Do lớp Picture định nghĩa một kết tập với đối tượng Graphic, nên Picturecài đặt Draw để gọi Draw trong các con của nó, và nó cài đặt các thao tác

Trang 38

con-quan hệ Do giao diện Picture tương thích với với giao diện Graphic,đối tượng Picture có thể tổ hợp các đệ quy Picture khác.

3.2.4.3.3 Ứng dụng

Muốn biểu diễn các biểu đồ part-whole của các đối tượng

Muốn client có thể bỏ qua sự khác nhau giữa các composition của cácđối tượng và đối tượng riêng lẻ Client sẽ vận dụng tất cả các đối tượngtrong cấu trúc thành phần một cách đồng bộ

3.2.4.3.4 Cấu trúc:

Các đối tượng typically Composite có thể được quan sát dưới dạng:

Operation Add(Component) Remove(Compone nt)

GetChild(int)

Composite

Operation() Add(Component) Remove(Compone nt)

Trang 39

aLeaf aLeaf aleaf

aleaf

Trang 40

o vận dụng các đối tượng vào thành phần thông qua giaodiện Component.

3.2.4.3.6 Kết quả.

Định nghĩa các biểu đồ lớp bao hàm cả các đối tượng ưu tiên và các đốitượng thành phần Đối tượng ưu tiên có thể được kết cấu vào nhiều đốitượng phức tạp Bất cứ khi nào mã client muốn một đối tượng ưu tiên,

nó cũng có thể sử dụng đối tượng thành phần

Tạo client đơn giản Client có thể xử lý các cấu trúc thành phần và cácđối tượng riêng lẻ một cách không đồng bộ

Dễ dàng thêm vào các dạng mới của các thành phần

Có thể làm cho thiết kế tổng quát hơn

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

Các client sử dụng giao diện lớp Component để tương thích với các đốitượng trong cấu trúc thành phần Nếu nơi nhận là nút Leaf, thì các yêu cầuđược nắm giữ một cách trực tiếp Nếu nơi nhận là Composite, thì các yêucầu thường được gửi tới các thành phần con của nó, các thao tác thêm vàotrước hoặc sau khi gửi tới và xử lý

3.2.4.3.8 Cài đặt

Đưa ra tham chiếu cha : Duy trì các tham chiếu từ các thành phần contới cha của chúng có thể làm đơn giản hoá việc thực hiện và quản lícủa cấu trúc thành phần

Chia sẻ thành phần : Sử dụng chung các thành phần thường có lợi hơnTối đa hoá giao diện Component

Khai báo các thao tác quản lí con : Mặc dù lớp Composite thực hiệncác thao tác Add và Remove đối với con, một vấn đề quan trọng trongComposite là những lớp nào khai báo những thao tác này trong biểu

đồ lớp Composite Một quyết định bao hàm sự cân bằng giữa độ antoàn và trong suốt là định nghĩa giao diện quản lí con tại gốc của biểu

đồ lớp, đồng thời trong suốt đối với bạn

Component có thể thực hiện được một danh sách các thành phầnkhông?

Nắm giữ để cải thiện việc cài đặt

Ai có thể xoá các thành phần

Ngày đăng: 07/08/2013, 19:31

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w