-10

Abstract Factory Design Pattern

Design Pattern là gì?

Design Pattern ban đầu đơn giản là một khái niệm kiến trúc do Christopher Alexander gây dựng. Lần đầu tiên được ứng dụng vào phần mềm vào năm 1987 bởi Kent Beck and Ward Cunningham. Hai ông trình bày ý tưởng của mình trong một hội nghị. Sau đó Design Pattern trở thành khái niệm phổ biến và tiếp tuc phát triển cho đến ngày nay. Design Pattern lần đầu tiên được tổng hợp thành cuốn sách hoàn chỉnh vào năm 1995 trong cuốn Design Patterns: Elements of Reusable Object-Oriented Software.

Trong phát triển phần mềm, Design Pattern là giải pháp thiết kế mã để tái sử dụng chúng. Design Pattern được sử dụng mạnh mẽ nhất trong OOP qua Object và Class. Có rất nhiều Design Pattern, theo tổng kết của Gang of Four, hiện tại có hơn 250 mẫu đang được sử dụng trong phát triển phần mềm, tuy nhiên bạn không cần sử dụng hết 250 mẫu này, một lập trình viên giỏi Desgin Pattern chỉ cần sử dụng thành thạo khoảng 23 mẫu.

Lưu ý: Design Pattern không phải thuật toán, không phải một component.

code-reuse.jpg

Mục đích của Design Pattern

Tại sao tôi phải dùng Design Pattern trong code? Code của tôi vẫn chạy ổn mà có cái pattern nào cả?

Tôi đã đọc code của nhiều lập trình viên, họ viết trải dài, code chạy ổn. Nhưng đến lúc phải sửa cái gì đấy, y rằng họ ngồi cặm cụi sửa, sửa, hết cái này phát sinh cái khác.

Học Design Pattern giúp lập trình viên có thiên hướng viết mã không đơn giản chỉ để có thể chạy được, nó giúp phát triển tư duy về thiết kế. Đó là suy nghĩ và thiết kế mọi thứ trước khi viết ra, từ đó, rút ngắn được thời gian dành cho phát triển, bảo trì và sử dụng lại.

Dưới đây, tôi trình bày một ví dụ của Design Pattern: Abstract Factory Design Pattern để hiểu thêm về lợi ích của Design Pattern trong phát triển phần mềm.

Abstract Factory Design Pattern

Đây là một pattern kinh điển trong loạt Create Pattern.

Factory? Trong tiếng Việt có nghĩa là nhà máy, pattern này được sử dụng khi hệ thống của bạn có nhiều đối tượng với thuộc tính, hành vi tương tự nhau. Pattern Factory giống như một nhà máy sản sinh các đối tượng tương tự nhau này cho bạn.

**Khi nào sử dụng và Lợi ích của Abstract Factory **

  • Taọ các đối tượng tương tự nhau
  • Cung cấp phương thức hoàn chỉnh (có thể tổng hợp thành library) để sinh các đối tượng
  • Tạo các đối tượng đặc biệt từ các lớp cha
  • Dễ dàng tạo extends system từ system cũ

Ví dụ

Thiết kế cho Shape là ví dụ kinh điển áp dụng Abstract Factory.

factory_pattern_uml_diagram.jpg

Shape.java

public interface Shape {
   void draw();
}

Rectangle.java

public class Rectangle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Rectangle::draw() method.");
   }
}

Square.java

public class Square implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Square::draw() method.");
   }
}

Tạo một lớp Factory để sinh các object: ShapeFactory.java

public class ShapeFactory {
   //use getShape method to get object of type shape
   public Shape getShape(String shapeType){
      if(shapeType == null){
         return null;
      }
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();

      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();

      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }

      return null;
   }
}

Đến đây bạn có thể tạo test đơn giản với Factory trên để kiệm nghiệm vai trò của Factory Design Pattern rồi.

_Enjoy coding! _

**Reference: **


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.