Có rất nhiều cách tiếp cận hợp lệ để giải quyết vấn đề của bạn. Basile Starynkevitch đã đề xuất một cách tiếp cận không quan liêu, không để lại cho bạn một giao diện đơn giản và dựa vào lập trình viên bằng cách sử dụng giao diện một cách thích hợp. Trong khi tôi thích cách tiếp cận này, tôi sẽ trình bày một cách khác có nhiều tính năng hơn nhưng cho phép trình biên dịch bắt được một số lỗi.
Xác định các trạng thái khác nhau thiết bị của bạn có thể ở, như Uninitialised
,
Started
, Configured
và vân vân. Danh sách này phải là hữu hạn.¹
Đối với mỗi trạng thái, xác định struct
việc giữ thông tin bổ sung cần thiết có liên quan đến trạng thái đó, ví dụ DeviceUninitialised
,
DeviceStarted
v.v.
Đóng gói tất cả các nghiệm thức trong một đối tượng DeviceStrategy
trong đó các phương thức sử dụng các cấu trúc được xác định trong 2. làm đầu vào và đầu ra. Do đó, bạn có thể có một DeviceStarted DeviceStrategy::start (DeviceUninitalised dev)
phương thức (hoặc bất cứ điều gì tương đương có thể theo các quy ước dự án của bạn).
Với phương pháp này, một chương trình hợp lệ phải gọi một số phương thức trong chuỗi được thi hành bởi các nguyên mẫu phương thức.
Các trạng thái khác nhau là các đối tượng không liên quan, điều này là do nguyên tắc thay thế. Nếu nó hữu ích cho bạn khi các cấu trúc này có chung một tổ tiên chung, hãy nhớ rằng mẫu khách truy cập có thể được sử dụng để khôi phục loại cụ thể của thể hiện của một lớp trừu tượng.
Trong khi tôi mô tả trong 3. một DeviceStrategy
lớp duy nhất , có những tình huống bạn có thể muốn phân chia chức năng mà nó cung cấp trên một số lớp.
Để tóm tắt chúng, những điểm chính của thiết kế tôi đã mô tả là:
Do nguyên tắc thay thế, các đối tượng đại diện cho trạng thái thiết bị phải khác biệt và không có quan hệ thừa kế đặc biệt.
Đóng gói các phương pháp điều trị thiết bị trong các đối tượng bắt đầu thay vì trong các đối tượng đại diện cho chính các thiết bị, sao cho mỗi trạng thái thiết bị hoặc thiết bị chỉ nhìn thấy chính nó và chiến lược nhìn thấy tất cả chúng và thể hiện sự chuyển tiếp có thể giữa chúng.
Tôi sẽ thề rằng tôi đã thấy một lần mô tả về việc triển khai máy khách telnet theo những dòng này, nhưng tôi không thể tìm lại được. Nó sẽ là một tài liệu tham khảo rất hữu ích!
: Đối với điều này, hãy làm theo trực giác của bạn hoặc tìm các lớp phương thức tương đương trong triển khai thực tế của bạn cho phương thức mối quan hệ “₁ phương thức “iff. sử dụng chúng trên cùng một đối tượng là hợp lệ - giả sử bạn có một đối tượng lớn gói gọn tất cả các phương pháp điều trị trên thiết bị của bạn. Cả hai phương pháp liệt kê các quốc gia đều cho kết quả tuyệt vời.
discovery
hayhandshake
?