ホームページ >Java >&#&チュートリアル >Java フライウェイト設計パターンを使用してオブジェクト作成を最適化し、パフォーマンスと効率を向上させる方法
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; } }Test
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); } }上記のサンプル コードでは、まず、製品の名前、価格、在庫、その他の属性を含む製品インターフェイス Product を作成します。次に、特定の製品クラス ConcreteProduct を作成し、Product インターフェイスを実装し、共有内部状態の名前、価格、および在庫を定義します。次に、共有製品オブジェクトを作成および管理するための製品ファクトリ ProductFactory を作成します。このファクトリでは、HashMap を使用して格納します共有製品オブジェクト。クライアントが製品を購入する必要があるときは、まず製品オブジェクトが作成されているかどうかを確認します。作成されている場合は、既存のオブジェクトへの参照を返します。作成されていない場合は、新しいオブジェクトを作成し、それを HashMap に保存し、その参照を返します。 ##オブジェクトを共有すると、システム内の同じオブジェクトのコピーが 1 つだけメモリ内に存在できるため、メモリのオーバーヘッドが削減されます。
以上がJava フライウェイト設計パターンを使用してオブジェクト作成を最適化し、パフォーマンスと効率を向上させる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。