Java の Flyweight パターンは、できるだけ多くのオブジェクトを共有することでメモリ使用量を削減し、パフォーマンスを向上させることを目的とした構造的な設計パターンです。
Java Flyweight モードには通常、次のものが含まれます。 4 つの役割
#Flyweight Factory: フライウェイト オブジェクトの作成と管理を担当します。
Concrete Flyweight (Concrete Flyweight): フライウェイト インターフェイスを実装し、ストアします共有状態に関連する内部状態
抽象フライウェイト (Flyweight): フライウェイト オブジェクトが実装する必要があるインターフェイス、または抽象クラスを定義します。
非共有状態: フライウェイト オブジェクトの非共有状態を保存します。
電子商取引における商品情報を例に挙げます。電子商取引では、各商品には名前、価格、在庫などの属性があります。通常、商品ごとに個別のオブジェクトを作成する必要があるため、メモリ使用量が増加します。同じ製品を複数回購入すると、システムは複数の同一のオブジェクトを作成し、リソースを無駄にします。抽象フライウェイト
public interface Product { String getName(); double getPrice(); int getStock(); }
public class ConcreteProduct implements Product{ private String name; private double price; private int stock; public ConcreteProduct(String name, double price, int stock) { this.name = name; this.price = price; this.stock = stock; } @Override public String getName() { return name; } @Override public double getPrice() { return price; } @Override public int getStock() { return stock; } }
public class ProductFactory { private static Map<String, Product> productMap = new HashMap<>(); public static Product getProduct(String name, double price, int stock) { String key = name + "_" + price; Product res = productMap.get(key); if (Objects.isNull(res)) { // 如果缓存池内不存在,就创建新对象放置到缓存池 res = new ConcreteProduct(name, price, stock); productMap.put(key, res); } return res; } }
public class Demo { public static void main(String[] args) { Product p1 = ProductFactory.getProduct("iPhone 14 Plus", 8899, 1); Product p2 = ProductFactory.getProduct("iPhone 14 Plus", 8899, 1); System.out.println(p1 == p2); } }
以上がJava フライウェイト設計パターンを使用してオブジェクト作成を最適化し、パフォーマンスと効率を向上させる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。