Chủ Nhật, 22 tháng 7, 2012

Design Pattern - Strategy

1. Đặt vấn đề
  Đầu tiên bạn có đối tượng, trong đối tượng này có 1 phương thức, sau một thời gian để phù hợp với nhu cầu chương trình bạn phải thay đổi phương thức này, khi đó bạn tạo 1 lớp mới kế thừa lớp cũ và ghi đè phương thức đó, cứ mỗi lần chỉnh sửa, mở rộng code như vậy làm chương trình bạn rất rối và khó kiểm soát. Mẫu strategy sẽ giúp bạn giải quyết điều này bằng cách tách phần chức năng dễ thay đổi này ra một lớp riêng, định nghĩa một tập hợp các thuật toán cho chứng năng đó và lựa chọn thuật toán phù hợp với bài toán cụ thể
2. Định nghĩa
 Định nghĩa một tập hợp các thuật toán, đóng gói chúng thành từng loại một và giúp chúng dễ hoán đổi cho nhau. Mẫu strategy giúp các thuật toán độc lập hơn khi sử dụng
3. Mô hình UML

Giải thích:
Strategy: Định nghĩa một interface chung cho tất cả các thuật toán
ConcreteStrategy: Cài đặt các thuật toán cụ thể
Context: Tham chiếu đến 1 đối tượng Strategy, cho phép lựa chọn thuật toán cụ thể trong trường hợp cụ thể
4. Code demo
abstract class Strategy
    {
       public abstract  void algorithm();
    }
    class ConcreteStrategyA : Strategy
    {
        public override void algorithm()
        {
            Console.WriteLine("ConcreteStragyA:Strategy");
        }
    }
    class ConcreteStrategyB : Strategy
    {
        public override void algorithm()
        {
            Console.WriteLine("ConcreteStragyB:Strategy");
        }
    }
    class Context
    {
        private Strategy _strategy;
        public Context(Strategy strategy)
        {
            _strategy = strategy;
        }
        public void algorithm()
        {
            _strategy.algorithm();

        }
    }
5. Kết luận
Mẫu strategy dùng trong các trường hợp sau:
- Có một đoạn code dễ thay đổi, chúng ta sẽ tách nó ra để có thể dễ dàng bảo trì
- Tránh sự răng rối, khi phải cài đặt lại một chức năng nào đó quá nhiều ở lớp con
- Muốn thay đổi thuật toán khi chạy chương trình

Không có nhận xét nào:

Đăng nhận xét