この投稿では、構造パターン「軽量」について説明します。または「日和見主義者」 (フライ級)
このパターンは構造パターンのグループに属します。
以下でパターンがどのように機能するかの例を見てみましょう。
なぜ必要なのでしょうか? RAM を節約するため。 Java (CPU とメモリを無駄に消費する) が広く使用されている現在では、これはそれほど重要ではなくなりましたが、使用する価値はあるという意見には私も同意します。
上記の例では40個のオブジェクトしか出力していませんが、120,000個に増やすとその分メモリ消費量も増加します
。Chromium ブラウザでフライウェイト パターンを使用しないメモリ消費量を見てみましょう。

パターンを使用しない場合、メモリ消費量は最大 300 メガバイトになります。
次に、パターンをアプリケーションに追加して、メモリ消費量を確認してみましょう。

このパターンを使用すると、メモリ消費量は約 200 メガバイトになるため、テスト アプリケーションでは 100 メガバイトのメモリを節約できます。この差はさらに大きくなる可能性があります。
それはどのように機能しますか?
上の例では、40 匹の猫を描画します。わかりやすくするために、120,000 匹の猫を描画します。各猫は PNG イメージとしてメモリにロードされ、ほとんどのレンダリングではレンダリング用のビットマップ (実際には bmp) に変換されます。圧縮された PNG はレンダリングに非常に時間がかかるため、これは速度を上げるために行われます。パターンを使用しない場合、12万枚の猫の写真をRAMにロードして描画しますが、パターンを使用すると「軽量」になります。 1 匹の猫をメモリにロードし、さまざまな位置と透明度で 12 万回描画します。重要なのは、猫の画像とは別に座標と透明度を実装することです。レンダリングでは 1 匹の猫だけを受け取り、正しいレンダリングのために座標と透明度を持つオブジェクトを使用します。
コードではどのようになりますか?
以下は、言語 Rise< /p>
パターンを使用しない場合:

猫の画像はループ内のオブジェクトごとに個別にロードされます。猫の画像。
使用パターン:
猫の 1 枚の写真が 12 万個のオブジェクトで使用されています。
どこで使用されますか?
Apple の「再利用」などの GUI フレームワークで使用されます。 (再利用) UITableViewCell テーブル セル。これにより、このパターンを知らない初心者にとっては参入障壁が高くなります。ゲーム開発でもよく使用されます。
ソースコード
https://gitlab.com/demensdeum/patterns/< /p>
ソース
https://refactoring.guru/ru/design-patterns/フライ級
http://gameprogrammingpatterns.com/flyweight.html

























