Flyweight Pattern Là Gì
Trong một vài tình huống trong phát triển phần mềm, bạn cũng có thể cải thiện công suất của áp dụng với việc sử dụng Cache. Hãy tưởng tượng siêu nhiều đối tượng được tạo thành và lãng phí bộ nhớ. Mô hình Flyweight được tạo thành để tránh vụ việc này và về tối ưu hóa hiệu suất.
Bạn đang xem: Flyweight pattern là gì
Flyweight Pattern là gì?
Use sharing to tư vấn large numbers of fine-grained objects efficiently.
Flyweight Pattern là giữa những Pattern thuộc nhóm cấu trúc (Structural Pattern). Nó có thể chấp nhận được tái sử dụng đối tượng người dùng tương tự vẫn tồn tại bằng cách lưu trữ chúng hoặc tạo đối tượng người sử dụng mới khi không kiếm thấy đối tượng phù hợp.
Flyweight Pattern được sử dụng khi họ cần tạo một vài lượng to các đối tượng của 1 lớp như thế nào đó. Bởi mỗi đối tượng người tiêu dùng đều đòi hỏi chiếm giữ lại một không gian gian cỗ nhớ, nên với một vài lượng lớn đối tượng người dùng được tạo thành ra rất có thể gây nên vấn đề nghiêm trọng đặc trưng đối với các thiết bị có dung lượng nhớ thấp. Flyweight Pattern hoàn toàn có thể được áp dụng để giảm tải cho bộ lưu trữ thông qua cách chia sẻ các đối tượng. Vị vậy performance của hệ thống được tối ưu.
Flyweight object là immutable, nghĩa là ko thể đổi khác khi nó đã có khởi tạo.
Xem thêm: Cách Đắp Mặt Bằng Dưa Chuột Có Tác Dụng Gì ? Công Thức Mặt Nạ Dưa Chuột Dưỡng Da
Hai tinh thần của Flyweight Object
Trạng thái của flyweight object là một phần quan trọng vào việc thiết kế Flyweight Pattern. Phương châm chính của Flyweight Pattern là giảm bộ nhớ bằng phương pháp chia sẽ các đối tượng. Điều này có thể đạt được bằng phương pháp tách các thuộc tính của đối tượng người dùng thành hai trạng thái: độc lập và phụ thuộc. Hay nói một cách khác là Intrinsic (trạng thái nội tại) và Extrinsic (trạng thái bên ngoài).
Intrinsic State (trạng thái nội tại) : Trạng thái này chứa tài liệu không thể thay đổi (unchangeable) và không nhờ vào (independent) vào văn cảnh (context) của đối tượng người dùng Flyweight . Những tài liệu đó có thể được lưu trữ vĩnh viễn bên trong đối tượng Flyweight. Do vậy mà lại Flyweight object có thể chia sẻ. Dữ liệu nội trên là phi tinh thần (stateless) cùng thường không biến hóa (unchanged). Thiên tài này có thể chấp nhận được khả năng tái tạo các thuộc tính đối tượng người tiêu dùng Flyweight thân các đối tượng tương tự khác. Điều quan trọng cần để ý là các đối tượng Flyweight nên làm nhận trạng thái phía bên trong của chúng trải qua các tham số của hàm tạo và không cung ứng các thủ tục setter hay các biến public.Extrinsic State (trạng thái bên ngoài) : Trạng thái bên phía ngoài thể hiện tính chất phụ thuộc vào ngữ cảnh của đối tượng flyweight. Tâm trạng này chứa những thuộc tính và tài liệu được áp dụng hoặc được đo lường và tính toán trong thời gian thực thi (runtime). Vị đó, những tài liệu đó ko được tàng trữ trong bộ nhớ. Bởi vì trạng thái phía bên ngoài là phụ thuộc ngữ cảnh và có thể chuyển đổi nên các đối tượng đó cần yếu được phân tách sẻ. Vì đó, client chịu trách nhiệm truyền dữ liệu liên quan đến trạng thái bên phía ngoài cho đối tượng người sử dụng flyweight khi đề xuất thiết, có thể thông qua những tham số (argument).Xem thêm: Mặc Đẹp Với Gam Màu Xanh Coban Hợp Với Màu Gì, 11 Màu Sắc Hợp Với Xanh Dương
Tóm lại, rất tốt là xem xét phương pháp mỗi tài liệu hoạt động phía bên trong đối tượng khi tạo đối tượng người sử dụng flyweight. Nghĩa là thành phần nào ko được chũm đổi, buộc phải lưu trữ, nguyên tố nào ko được cố gắng đổi, không phải lưu trữ. Điều này góp cho bọn họ tiết kiệm được bộ nhớ lưu trữ và xúc tiến được hiệu quả.
Cài để Flyweight Pattern như vậy nào?

ISoldier.java
package com.shirohada.com.vn.patterns.structural.flyweight;/** * Flyweight */public interface ISoldier void promote(Context context);Context.java
package com.shirohada.com.vn.patterns.structural.flyweight;/** * Extrinsic State */public class Context private String id;private int star;public Context(String id, int star) this.id = id;this.star = star;public String getId() return this.id;public int getStar() return this.star;Soldier.java
package com.shirohada.com.vn.patterns.structural.flyweight;/** * Concrete Flyweight */public class Soldier implements ISoldier {private final String name; // Intrinsic Statepublic Soldier(String name) this.name = name;System.out.println("Soldier is created! - " + name);