Giới thiệu tính năng của chương trình
Chương trình thiết bị điện tử được phát triển bằng ngôn ngữ lập trình Java, áp dụng các Design Pattern nhằm tối ưu hóa và dễ dàng bảo trì hệ thống Nó cho phép người dùng thực hiện mua bán thiết bị điện tử, lưu trữ dữ liệu người dùng sau khi đăng ký, quản lý thông tin các mặt hàng và xuất hóa đơn sau khi xác nhận và thanh toán.
- Chức năng mua bán hàng hoá:
Người dùng có thể dễ dàng mua bán các sản phẩm trong chương trình thiết bị điện tử bằng cách chọn mặt hàng mong muốn và xác nhận giao dịch.
- Chức năng lưu trữ dữ liệu:
Thông tin các nhân của khách hàng.
Thông tin các mặt hàng được bán.
- Chức năng xuất hoá đơn:
9 download by : skknchat@gmail.com
Tổng thể thiết kế
10 download by : skknchat@gmail.com
UML Classdiagram của chương trình thiết bị điện tử thể hiện chi tiết các lớp (class) và cấu trúc tĩnh của hệ thống Nó mô tả các đặc trưng cơ bản của chương trình, bao gồm các mẫu thiết kế (Design Pattern) được áp dụng để nâng cao năng suất, cải thiện chất lượng mã nguồn và giảm thiểu tài nguyên trong quá trình bảo trì.
Chương trình thiết bị điện tử sử dụng 6 mẫu thiết kế (Design Pattern) bao gồm:
Áp dụng các mẫu thiết kế như Data Access Object Pattern cho phép chương trình lưu trữ dữ liệu khách hàng và hàng hóa, trong khi Command Pattern hỗ trợ xuất hóa đơn bán hàng Decorator Pattern giúp tái sử dụng mã và mở rộng các hàm hoặc lớp mà không cần thay đổi mã gốc Bằng cách sử dụng Template Pattern, chương trình có thể định nghĩa lại cách thực hiện của một số lớp mà không thay đổi thuật toán Singleton Pattern giới hạn việc khởi tạo lớp đối tượng, cho phép một lớp điều khiển nhiều lớp con khác, như minh họa qua lớp SmartPhone Cuối cùng, Factory Pattern giúp quản lý và thực thi hệ thống theo yêu cầu của người dùng.
Các mẫu thiết kế
Data Access Object pattern
Trong dự án bán thiết bị điện tử của tôi, tôi sử dụng cơ sở dữ liệu MySQL để lưu trữ thông tin người dùng như email và mật khẩu Để tương tác với cơ sở dữ liệu, tôi cần sử dụng trình điều khiển SQL Tuy nhiên, trong quá trình phát triển hệ thống bán hàng, giám đốc sản xuất phần mềm đã đề xuất chuyển đổi sang sử dụng Oracle.
11 download by : skknchat@gmail.com
Database Sau đó chúng tôi phải định dạng lại mã sao cho phù hợp với cơ sở dữ liệu này.
Vấn đề nảy sinh khi các lớp nghiệp vụ kết hợp chặt chẽ với lớp logic lưu trữ, dẫn đến khó khăn trong việc chuyển đổi sang cơ sở dữ liệu khác.
Mẫu thiết kế Data Access Object (DAO) là một trong những cấu trúc trong nhóm Pattern, giúp tách biệt logic lưu trữ dữ liệu vào một lớp riêng Điều này cho phép các dịch vụ không cần biết cách thức thực hiện các hoạt động truy cập cơ sở dữ liệu Thay vì giao tiếp trực tiếp với các hệ thống lưu trữ như cơ sở dữ liệu, hệ thống file hay dịch vụ web, logic của ứng dụng sẽ tương tác thông qua lớp trung gian DAO Lớp DAO sẽ thực hiện các chức năng liên quan đến lưu trữ và truy vấn dữ liệu như tìm kiếm, thêm, xóa và sửa đổi.
Lớp DAO đóng vai trò là cầu nối giữa các lớp khác và lớp logic lưu trữ, cho phép giao tiếp hiệu quả với nhiều cơ chế lưu trữ khác nhau như quản lý tệp và cơ sở dữ liệu Lớp này cũng thực hiện các thao tác cơ bản như CRUD (Create, Read, Update, Delete).
12 download by : skknchat@gmail.com b) UML minh họa: c) Ứng dụng của pattern:
DAO Pattern dựa trên các nguyên tắc thiết kế abstraction và encapsulation.
Mẫu DAO (Data Access Object) bảo vệ ứng dụng khỏi sự thay đổi trong lớp lưu trữ, chẳng hạn như việc chuyển đổi từ Oracle sang MySQL hoặc từ file sang database Để triển khai mẫu DAO, chúng ta cần thực hiện bốn bước cơ bản.
1 Tạo lớp Accounts bao gồm các thuộc tính (name, email, id) chứa các phương thức get/set được sử dụng để lưu trữ dữ liệu và được sử dụng trong DAO class.
13 download by : skknchat@gmail.com
2 Tạo lớp DAO (phương thức Design Access Object) là một interface định nghĩa các phương thức trừu tượng việc triển khai truy cập dữ liệu cơ bản cho BusinessObject để cho phép truy cập vào nguồn dữ liệu.
3 Tạo lớp AdminDAO và sử dụng thư viện List để cho dữ liệu vào và cài đặt các chức năng (function: delete, get) Lớp này sẽ thao tác trực tiếp với nguồn dữ liệu (DataSource).
14 download by : skknchat@gmail.com
4 Tạo lớp Client để có thể chạy thử code
Singleton pattern
Singleton là 1 trong 5 design pattern của nhóm Creational Design Pattern.
15 download by : skknchat@gmail.com
Singleton đảm bảo rằng chỉ có một thể hiện duy nhất được tạo ra trong chương trình, và nó cung cấp một phương thức để truy xuất thể hiện này mọi lúc, mọi nơi UML có thể minh họa cấu trúc của pattern này một cách rõ ràng Pattern Singleton thường được ứng dụng trong các trường hợp cần quản lý tài nguyên chung hoặc khi cần đảm bảo tính nhất quán trong việc truy cập dữ liệu.
The Singleton class is designed to have only one instance, making it ideal for scenarios that require access to shared resources, such as logging, configuration management, caching, and thread pooling.
Several design patterns, such as Abstract Factory, Builder, Prototype, and Facade, also utilize the Singleton pattern for implementation To illustrate the Singleton Pattern mentioned above, we will follow a specific step in the coding process.
Cách đơn giản nhất để đảm bảo rằng chỉ có một thể hiện của lớp được tạo ra là sử dụng phương thức synchronized của hàm getInstance() Nhờ đó, hệ thống đảm bảo rằng tại cùng một thời điểm chỉ có thể có một thể hiện duy nhất.
1 luông co thê truy câp vao ham getInstance() va đam bao răng chi co duy nhât 1 thê hiên cua class.
16 download by : skknchat@gmail.com
Factory pattern
Factory Pattern là một trong những mẫu thiết kế thuộc nhóm Creational Design Pattern Mục tiêu của Factory Pattern là quản lý và cung cấp các đối tượng theo yêu cầu, từ đó giúp việc khởi tạo đối tượng trở nên linh hoạt hơn.
Factory Pattern đúng nghĩa là một nhà máy, và nhà máy này sẽ “sản xuất” các đối tượng theo yêu cầu của chúng ta.
Hệ thống mua bán điện thoại cung cấp API để khách hàng có thể truy cập và đặt hàng các loại điện thoại Đội ngũ thiết kế API nhằm đáp ứng nhu cầu của khách hàng, cho phép họ sử dụng dịch vụ của hai loại điện thoại hiện tại Để đảm bảo tính mở rộng trong tương lai mà không cần thay đổi mã nguồn, việc áp dụng Factory Pattern là giải pháp hợp lý, giúp khách hàng dễ dàng thêm các dòng điện thoại mới để phục vụ đối tượng khác nhau.
17 download by : skknchat@gmail.com b) UML minh họa: c) Ứng dụng của pattern:
Chúng ta có một super class với nhiều class con, và dựa trên đầu vào, hệ thống sẽ trả về một class con tương ứng Mô hình này chuyển giao trách nhiệm khởi tạo lớp từ người dùng (client) sang lớp Factory, giúp tối ưu hóa quy trình và tăng tính linh hoạt trong việc quản lý các class con.
Khi cần mở rộng các lớp con trong tương lai, hãy tạo ra sub class mới và bổ sung vào factory method để hỗ trợ việc khởi tạo các sub class này.
Factory Pattern được áp dụng trong:
JDK: java.util.Calendar, ResourceBundle, NumberFormat,
18 download by : skknchat@gmail.com
SessionFactory trong Hibernate Framework. d) Mô tả khái quát về code: Để tạo một ví dụ Factory Pattern kể trên chúng ta sẽ tiến hành 6 bước sau:
1 Tạo lớp smartphone chứa các phương thức price, Delivery, getDescription được sử dụng để mô tả giá thành và tên sản phẩm đồng thời để áp dụng template pattern.
2 Tạo lớp Dienthoaicaocap là môt supper class trong Factory Pattern có thể là một interface, abstract class hay một class thông thường.
19 download by : skknchat@gmail.com
3 Tạo lớp Dienthoaitamtrung là môt supper class trong Factory Pattern có thể là một interface, abstract class hay một class thông thường.
20 download by : skknchat@gmail.com
21 download by : skknchat@gmail.com
4 Smartphonefactory là một class chịu tránh nhiệm khởi tạo các đối tượng sub class dựa theo tham số đầu vào.
22 download by : skknchat@gmail.com
5 Iphone12promax và Samsung21ultra là những lớp con được kế thừa từ lớp Dienthoaicaocap đồng thời có các tính năng mua sản phẩm khác như airpod.
6 Realmesix và Xiaominote8 là những lớp con được kế thừa từ lớp
23 download by : skknchat@gmail.com
7 Tạo lớp Client để chạy thử code
24 download by : skknchat@gmail.com
Template Pattern
Dự án bán thiết bị điện tử bao gồm nhiều sản phẩm như điện thoại và máy tính Trong phân khúc điện thoại, chúng tôi cung cấp các dòng sản phẩm tầm trung và cao cấp Đối với điện thoại tầm trung, khách hàng được hưởng các dịch vụ vận chuyển và thanh toán tiện lợi Đối với điện thoại cao cấp, chúng tôi còn cung cấp thêm các dịch vụ như phụ kiện và bảo hành tại nhà, nhằm nâng cao trải nghiệm khách hàng.
Các phân khúc điện thoại đều chia sẻ các phương thức dịch vụ cơ bản như vận chuyển và thanh toán Việc tái sử dụng các chức năng chung giữa hai phân khúc giúp tiết kiệm thời gian, đồng thời cho phép bổ sung các tính năng mới cho dòng sản phẩm cao cấp Do đó, chúng tôi áp dụng phương pháp Template Method Pattern trong trường hợp này.
Mẫu Template Pattern định nghĩa khung cho một thuật toán trong một chức năng và chuyển giao việc thực hiện cho các lớp con Mẫu Template Method cho phép các lớp con tùy chỉnh cách thực hiện thuật toán mà không cần thay đổi cấu trúc cơ bản của nó.
Phương pháp Template giúp chúng tôi xây dựng một khung chung cho các vấn đề cụ thể như tái sử dụng chức năng từ điện thoại tầm trung và bổ sung cho điện thoại cao cấp Các đối tượng như delivery, payment, và addtocart sẽ có quy trình thực hiện giống nhau, nhưng mỗi bước có thể khác nhau, tạo ra sự đồng nhất trong cách truy cập nhưng với hành động và kết quả khác biệt Chúng tôi có thể viết một phương thức để xác định các thuật toán như Delivery, Payment, và Addtocart, nhằm thực hiện nhiều chức năng cho điện thoại cao cấp.
25 download by : skknchat@gmail.com c) Ứng dụng của pattern:
Tái sử dụng code và tránh trùng lặp code là rất quan trọng, giúp việc thêm chức năng mới trở nên dễ dàng hơn bằng cách tận dụng các chức năng đã có Chẳng hạn, trên điện thoại cao cấp, nhiều chức năng từ điện thoại tầm trung có thể được sử dụng lại Để áp dụng Template Pattern vào hệ thống bán hàng thiết bị điện tử, chúng tôi đã thực hiện các bước cụ thể để tối ưu hóa quy trình phát triển.
Chúng tôi tạo một lớp Smartphone chứa các chức năng có thể sử dụng chung của hai phân khúc điện thoại cao cấp và điện thoại tầm trung.
26 download by : skknchat@gmail.com
Sau đó tiến hành triển khai chức năng ỏ hai phân khúc điện thoại cao cấp và điện thoại tầm trung.
27 download by : skknchat@gmail.com
Sau khi hoàn thành việc lập trình các chức năng, chúng tôi có thể áp dụng những tính năng tương tự cho cả phân khúc điện thoại tầm trung và cao cấp, giúp tiết kiệm thời gian đáng kể.
Decorator pattern
Trong hệ thống thiết bị điện tử của chúng tôi, việc mở rộng một phương thức trong lớp computer thường được thực hiện thông qua kế thừa đối tượng Mặc dù phương pháp này không sai, nhưng trong một số trường hợp, nó có thể khiến mã nguồn trở nên phức tạp hơn mong đợi.
Mẫu thiết kế Decorator cho phép mở rộng các phương thức một cách linh hoạt, là lý do chính cho việc sử dụng nó UML minh họa rõ ràng cách thức hoạt động của mẫu thiết kế này Ứng dụng của pattern này rất đa dạng trong việc cải thiện và mở rộng chức năng của các đối tượng mà không cần thay đổi mã nguồn gốc.
29 download by : skknchat@gmail.com
Mẫu thiết kế Decorator thuộc nhóm cấu trúc, cho phép mở rộng một đối tượng bằng cách thêm biến hoặc phương thức mới Trong lĩnh vực thiết bị điện tử, khả năng mở rộng của máy tính rất đa dạng, vì vậy mẫu Decorator được áp dụng để tối ưu hóa hiệu quả cho chương trình.
Từ lớp computer, chúng tôi sẽ mở rộng thêm nhiều lớp khác để tăng cường sự đa dạng cho sản phẩm, cung cấp nhiều lựa chọn phụ kiện và các gói mở rộng khác nhau.
Chúng tôi đã mở rộng các thuộc tính của lớp máy tính, bao gồm các thành phần như Case, CPU, MainBoard, nhằm tăng cường sự đa dạng trong khả năng tùy chọn cho sản phẩm máy tính.
30 download by : skknchat@gmail.com
Lớp CaseCPU lại chính là lớp mở rộng của Ecomponents tạo khả năng tuỳ biến cao cho hệ thống thiết bị điện tử của chúng tôi.
Command pattern
Command Pattern là một trong những mẫu thiết kế hành vi, giúp đóng gói tất cả thông tin cần thiết vào một đối tượng để thực hiện hành động hoặc kích hoạt sự kiện sau này Đối tượng này có thể chứa tên phương thức, các biến và giá trị cần thiết, cho phép chuyển đổi yêu cầu thành một đối tượng độc lập Command Pattern cũng cho phép lưu trữ tất cả các yêu cầu gửi đến đối tượng dưới dạng một đối tượng Command, tạo ra sự linh hoạt và dễ dàng trong việc quản lý các hành động.
Chúng tôi áp dụng Command Pattern để tối ưu hóa quy trình lưu trữ và xuất hoá đơn bán hàng sau khi khách hàng hoàn tất giao dịch mua hàng, nhờ vào những lợi ích mà mẫu thiết kế này mang lại Dưới đây là minh hoạ UML cho quy trình này.
31 download by : skknchat@gmail.com c) Ứng dụng của pattern:
Sau khi khách hàng thực hiện mua hàng, yêu cầu từ phía họ sẽ được đóng gói thành một đối tượng command và chuyển đến một thành phần riêng biệt để thực thi, có thể là gửi trực tiếp hoặc đưa vào queue để lưu trữ Mẫu lệnh (Command pattern) giúp phân tách quá trình tiếp nhận yêu cầu với quá trình thực hiện yêu cầu Cuối cùng, hệ thống sẽ xuất hóa đơn cho khách hàng, bao gồm thông tin chi tiết về sản phẩm đã mua.
Chính vì vậy, công việc xử lý request sẽ trở nên linh hoạt và dễ nâng cấp hơn. d) Mô tả khái quát về code:
32 download by : skknchat@gmail.com
Khách hàng cung cấp thông tin bán hàng và sau đó được lưu trữ vào mục đơn hàng smartphone nếu họ mua điện thoại, hoặc vào mục đơn hàng máy tính nếu họ mua máy tính.
33 download by : skknchat@gmail.com
Sau đó thông tin sẽ được chuyển tới CommandPattern và xuất ra màn hình hoá đơn mua hàng của khách hàng.
IV Kết quả đạt được và hướng mở rộng:
Hệ thống thiết bị điện tử của chúng tôi đã đạt được kết quả mong muốn, đáp ứng đầy đủ các mục tiêu đề ra Việc áp dụng 6 design pattern không chỉ nâng cao hiệu quả cho chương trình mà còn giúp tiết kiệm thời gian trong quá trình hoàn thành mã nguồn.
Trong tương lai, hệ thống sẽ phát triển và cung cấp nhiều dòng điện thoại cũng như máy tính, mang đến cho người dùng nhiều sự lựa chọn hơn Chúng tôi sẽ cải thiện cơ sở dữ liệu và bổ sung các chức năng như đăng ký khách hàng, quản lý dữ liệu và tối ưu hóa mã nguồn để nâng cao hiệu suất hệ thống.
Source code: https://github.com/huyquag/Design-Pattern-FinalProject
V Tài liệu tham khảo: https://gpcoder.com/4190-huong-dan-java-design-pattern-singleton/ https://gpcoder.com/4352-huong-dan-java-design-pattern-factory-method/ https://www.tutorialspoint.com/design_pattern/data_access_object_pattern.html/ https://gpcoder.com/4810-huong-dan-java-design-pattern-template-method/ https://gpcoder.com/4686-huong-dan-java-design-pattern-command/ https://gpcoder.com/4574-huong-dan-java-design-pattern-decorator/
34 download by : skknchat@gmail.com