Giả sử chúng ta muốn xác định hành vi của các con vật như Cat (Mèo), Monkey (Khỉ) và Whale (Cá voi), tương ứng với ba lớp Cat, Monkey, và Whale, như trong mô hình đầu tiên. Các con vật có rất nhiều hành vi, tuy nhiên chúng ta sẽ giới hạn chúng chỉ còn ba hành vi, được mô tả trong form (mẫu) các chức năng dưới đây:
o boolean givesMilk(): trả lại true nếu con vật có thể cho sữa và false nếu ngược lại.
oString makeSound(): trả lại xâu mô tả âm thanh phổ biến mà con vật tạo ra.
oboolean givesLiveBirth(): trả lại true nếu con vật còn non ngày tuổi. Ta có biểu đồ lớp ban đầu thể hiện hành vi của các con vật như sau:
Hình 4.1. Các lớp UML ban đầu.
Chúng ta có thể bắt đầu với việc thiết kế các lớp như mô hình ban đầu. Tuy nhiên, chúng ta sẽ thực thi cùng đoạn mã giống nhau với phương thức givesMilk và givesLiveBirth trong ba lớp. Sau đó, nếu ta muốn thêm một lớp mới, đoạn mã sẽ được sao đi sao lại nhiều lần nữa.
Mammal. Phương thức makeSound() trả lại giá trị khác nhau đối với từng loài động vật, nhưng chúng ta trông đợi bất kì con vật nào bao gồm các loài động vật, có thể phát ra được âm thanh. Vì vậy, lớp Mammal có phương thức makeSound(), nhưng chúng ta không biết chính xác là âm thanh như thế nào, nên phương thức này trong lớp Mammal là phương thức trừu tượng. Các phương thức
makeSound() trong các lớp cụ thể Cat, Monkey và Whale sẽ là phương thức cụ thể, bởi vì mỗi loài động vật lại tạo ra một âm thanh riêng. Biểu đồ lớp sau khi áp dụng mẫu Union Pattern được biểu diễn như sau:
Hình 4.2. Biểu đồ lớp sau khi tinh chế áp dụng mẫu Union Pattern.
Bây giờ chúng ta phải kiểm tra xem bản tinh chế có đảm bảo nó đã thỏa mãn cấu trúc của Union Pattern và tương đương về các hành vi so với hanh vi của biểu đồ lớp ban đầu hay chưa:
o Lớp Cat, Monkey và lớp Whale là tất cả các lớp cụ thể. Chúng có các phương thức giống nhau là givesMilk, makeSoun, và givesLiveBirth. Nhưng chúng thực thi chỉ hai phương thức givesMilk và givesLiveBirth là giống nhau.
o Mỗi lớp trong biểu đồ thực thi phương thức makeSound theo một cách khác nhau.
Thứ hai là chúng ta mô tả các luật tinh chế để đảm bảo rằng nó thỏa mãn cấu trúc của Union Pattern:
o Tồn tại một lớp cha trừu tượng trong bản tinh chế.
o Tất cả các lớp cụ thể trong biểu đồ lớp ban đầu là các lớp con của lớp cha trừu tượng.
o Lớp cha trừu tượng có các phương thức givesMilk, makeSound, givesLiveBirth trong đó lớp givesMilk và givesLiveBirth là phương thức cụ thể, còn makeSound là phương thức trừu tượng.
o Tất cả các lớp cụ thể có một phương thức trừu tượng tên là makeSound thực thi phương thức trừu tượng trong lớp cha.
Bây giờ, chúng ta phải kiểm tra xem bản tinh chế xem nó có thỏa mãn tất cả các luật ở trên không. Chúng tôi sẽ thực hiện ba bước trong quy trình kiểm tra trong phần 4.2 sau đây.
4.2. Các bước thực hiện