Flyweight pattern là gì

  -  

Trong một vài trường hợp vào cải cách và phát triển phần mềm, chúng ta có thể nâng cấp công suất của áp dụng cùng với Việc sử dụng Cache. Hãy tưởng tượng rất nhiều đối tượng người tiêu dùng được tạo thành với lãng phí bộ nhớ lưu trữ. Mô hình Flyweight được tạo thành nhằm rời vụ việc này cùng tối ưu hóa năng suất.

Bạn đang xem: Flyweight pattern là gì


Flyweight Pattern là gì?

Use sharing to lớn support large numbers of fine-grained objects efficiently.

Flyweight Pattern là 1 trong giữa những Pattern thuộc team kết cấu (Structural Pattern). Nó cho phép tái thực hiện đối tượng người dùng tựa như đã vĩnh cửu bằng phương pháp lưu trữ bọn chúng hoặc chế tạo đối tượng bắt đầu lúc không tìm kiếm thấy đối tượng người dùng tương xứng.

Flyweight Pattern được áp dụng Khi họ bắt buộc tạo ra một số trong những lượng bự những đối tượng người dùng của 1 lớp như thế nào đó. Do từng đối tượng người tiêu dùng phần lớn yên cầu chiếm phần duy trì một không gian gian bộ nhớ, yêu cầu cùng với một số trong những lượng lớn đối tượng người tiêu dùng được tạo ra hoàn toàn có thể gây ra vấn đề nghiêm trọng quan trọng đặc biệt đối với những sản phẩm công nghệ tất cả dung lượng ghi nhớ rẻ. Flyweight Pattern có thể được vận dụng để bớt cài đến bộ lưu trữ thông qua cách share những đối tượng. Vì vậy performance của hệ thống được tối ưu.

Flyweight object là immutable, tức là quan trọng biến hóa khi nó đã làm được khởi tạo nên.

Xem thêm: Bộ Công Thương Tên Tiếng Anh Là Gì, Bộ Công Thương Tiếng Anh Là Gì

Hai tâm lý của Flyweight Object

Trạng thái của flyweight object là 1 phần đặc biệt quan trọng trong bài toán xây dựng Flyweight Pattern. Mục tiêu chủ yếu của Flyweight Pattern là sút bộ nhớ lưu trữ bằng phương pháp chia vẫn những đối tượng người tiêu dùng. Vấn đề này hoàn toàn có thể đã đạt được bằng phương pháp tách bóc các nằm trong tính của đối tượng người dùng thành nhì trạng thái: tự do cùng dựa vào. Hay còn gọi là Intrinsic (tinh thần nội tại) và Extrinsic (tinh thần mặt ngoài).

Intrinsic State (tâm trạng nội tại) : Trạng thái này cất dữ liệu quan yếu đổi khác (unchangeable) với không phụ thuộc (independent) vào ngữ chình ảnh (context) của đối tượng Flyweight . Những tài liệu kia có thể được tàng trữ dài lâu bên phía trong đối tượng người sử dụng Flyweight. Vì vậy nhưng Flyweight object có thể chia sẻ. Dữ liệu nội tại là phi tâm lý (stateless) và thường không biến hóa (unchanged). Tính năng này được cho phép năng lực tái tạo nên những ở trong tính đối tượng Flyweight thân các đối tượng người tiêu dùng giống như khác. Điều đặc biệt nên lưu ý là các đối tượng Flyweight nên làm nhấn trạng thái bên trong của bọn chúng trải qua các tmê say số của hàm sản xuất cùng không hỗ trợ các cách tiến hành setter tuyệt những biến đổi public.Extrinsic State (tinh thần mặt ngoài) : Trạng thái bên ngoài biểu đạt đặc điểm phụ thuộc ngữ chình họa của đối tượng người tiêu dùng flyweight. Trạng thái này đựng những ở trong tính cùng dữ liệu được áp dụng hoặc được tính tân oán trong thời gian tiến hành (runtime). Do kia, phần đa dữ liệu đó ko được tàng trữ trong bộ lưu trữ. Vì trạng thái bên phía ngoài là nhờ vào ngữ chình ảnh cùng có thể thay đổi nên các đối tượng người tiêu dùng đó cấp thiết được chia sẻ. Do kia, client chịu đựng trách rưới nhiệm truyền tài liệu tương quan mang đến tâm lý bên phía ngoài cho đối tượng người tiêu dùng flyweight khi cần thiết, rất có thể trải qua những tsi số (argument).

Xem thêm: Hợp Long Là Gì ? Việc Phân Chia Các Đốt Đúc Của Dầm Đúc Hẫng

Tóm lại, tốt nhất là chu đáo biện pháp mỗi dữ liệu chuyển động bên phía trong đối tượng người dùng lúc tạo thành đối tượng người dùng flyweight. Nghĩa là nhân tố nào không được biến đổi, cần lưu trữ, yếu tố nào ko được đổi khác, ko đề nghị lưu trữ. Như vậy giúp cho chúng ta tiết kiệm ngân sách và chi phí được bộ nhớ lưu trữ cùng tiến hành được công dụng.

Cài đặt Flyweight Pattern như vậy nào?

*

ISoldier.java

package com.hufa.edu.vn.patterns.structural.flyweight;/** * Flyweight */public interface ISoldier void promote(Context context);Context.java

package com.hufa.edu.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.hufa.edu.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);