[Design Patterns] Factory Pattern

Factory là một trong những dạng thức triển khai được sử dụng nhiều nhất và được xếp vào nhóm các dạng thức Khởi Tạo. Trong phép triển khai Factory, chúng ta tạo ra các object mà không để mở logic khởi tạo cho phía client (đoạn code gửi yêu cầu và sử dụng object được

Factory là một trong những dạng thức triển khai được sử dụng nhiều nhất và được xếp vào nhóm các dạng thức Khởi Tạo.

Trong phép triển khai Factory, chúng ta tạo ra các object mà không để mở logic khởi tạo cho phía client (đoạn code gửi yêu cầu và sử dụng object được khởi tạo). Thêm vào đó, việc tham chiếu tới object được khởi tạo sẽ được thực hiện thông qua một interface (giao diện) chung thay vì sử dụng class cụ thể.

Áp dụng triển khai

  • Chúng ta sẽ tạo ra 01 interface chung có tên là Shape cho các class mô tả hình 2D (hình tròn, tam giác, hình vuông) và các class cụ thể triển khai interface này.
  • Ở bước tiếp theo, 01 class có tên là Factory sẽ được định nghĩa.
  • Cuối cùng là main của chương trình sẽ sử dụng Factory để yêu cầu khởi tạo 1 Shape (hình 2D). main sẽ truyền vào thông tin về kiểu Shape muốn khởi tạo (circle / triangle / square – hình tròn / tam giác / hình vuông).

sơ đồ các class

Về mặt quản lý code, chúng ta sẽ có 1 package được đặt tên là shapefactory. Package này sẽ chứa:

  • 01 class Factory mở public
  • 01 interface Shape mở public
  • 03 class triển khai để default

Điều này có nghĩa là code client ở phía bên ngoài package sẽ hoàn toàn không biết tới 03 class triển khai Shape mà chỉ có thể gọi Factory để khởi tạo các Shape và tham chiếu tới các object được tạo ra thông qua interface.

Bước 1

Tạo 01 interface có tên là Shape mở public.

shapefactory/Shape.java

packageshapefactory;publicinterfaceShape{voiddraw();}

Bước 2

Tạo các class cụ thể triển khai interface với access modifier đặt default, không mở public.

shapefactory/Circle.java

packageshapefactory;classCircleimplementsShape{@Overridepublicvoiddraw(){System.out.println("Một hình tròn.");}}

shapefactory/Triangle.java

packageshapefactory;classTriangleimplementsShape{@Overridepublicvoiddraw(){System.out.println("Một hình tam giác.");}}

shapefactory/Square.java

packageshapefactory;classSquareimplementsShape{@Overridepublicvoiddraw(){System.out.println("Một hình vuông.");}}

Bước 3

Tạo 1 Factory để sản xuất các Object thực thể với thông tin được cung cấp từ code client.

shapefactory/Factory.java

packageshapefactory;publicclassFactory{publicShapecreateShape(String type){if(type ==null)returnnull;if(type.equalsIgnoreCase("circle"))returnnewCircle();if(type.equalsIgnoreCase("triangle"))returnnewTriangle();if(type.equalsIgnoreCase("square"))returnnewSquare();elsereturnnull;}}

Bước 4

Sử dụng Factory trong code client ở main để yêu cầu khởi tạo các Object bằng cách truyền vào thông tin về loại hình của Shape.

FactoryPatternDemo.java

importshapefactory.Factory;importshapefactory.Shape;publicclassFactoryPatternDemo{publicstaticvoidmain(String[] args){Factory shapeFactory =newFactory();// Yêu cầu khởi tạo một Object hình tròn và gọi draw() để vẽShape circle = shapeFactory.createShape("circle");
      circle.draw();// Yêu cầu khởi tạo một Object hình tam giác và gọi draw() để vẽShape triangle = shapeFactory.createShape("triangle");
      triangle.draw();// Yêu cầu khởi tạo một Object hình vuông và gọi draw() để vẽShape square = shapeFactory.createShape("square");
      square.draw();}}

Bước 5

Kiểm chứng lại kết quả được in ra ở Console.

console

Một hình tròn.
Một hình tam giác.
Một hình vuông.

Nguồn: viblo.asia

Bài viết liên quan

7 Cách Tăng Tốc Ứng Dụng React Hiệu Quả Mà Bạn Có Thể Làm Ngay

React là một thư viện JavaScript phổ biến trong việc xây dựng giao diện người d

Trung Quốc “thả quân bài tẩy”: hàng loạt robot hình người!

MỘT CUỘC CÁCH MẠNG ROBOT ĐANG HÌNH THÀNH Ở TRUNG QUỐC Thượng Hải, ngày 13/5 –

9 Mẹo lập trình Web “ẩn mình” giúp tiết kiệm hàng giờ đồng hồ

Hầu hết các lập trình viên (kể cả những người giỏi) đều tốn thời gian x

Can GPT-4o Generate Images? All You Need to Know about GPT-4o-image

OpenAI‘s GPT-4o, introduced on March 25, 2025, has revolutionized the way we create visual con