デザインパターンのフライ級モード22

バックグラウンド

コーディング開発プロセスでは、同じまたは類似のオブジェクトのインスタンスを多数作成する必要があるという問題が発生する可能性があります。これらのオブジェクトを作成すると、システムリソースが消費されます。ただし、これらの一般的な部分を抽出できるため、システムリソースを大幅に節約できます。だからフライ級モデルが出てきました。

フライ級モデルとは

「「

共有を使用して、多数の細粒度オブジェクトを効率的にサポートします(共有オブジェクトを使用すると、多数の細粒度オブジェクトを効果的にサポートできます)。

Flyweightモデルの中心的なアイデアは共有であり、同じオブジェクトのコピーが1つだけ保持されます。ただし、共有を実現するために、さまざまな状態が外部に抽出されるため、プログラムの複雑さが増します。

Flyweightモデルは、主に次の要素で構成されています。

「「
  • 抽象Flyweight:すべての特定のFlyweightクラスの基本クラスです。特定のFlyweight仕様で実装する必要があるパブリックインターフェイスです。非Flyweightの外部状態は、パラメーターの形式でメソッドを介して渡されます。

  • 具体的なFlyweightロール:抽象Flyweightロールで指定されたインターフェイスを実装します。

  • Unsharable Flyweight(Unsharable Flyweight)の役割:共有できない外部状態であり、パラメーターの形式で特定のFlyweightの関連するメソッドに注入されます。

  • Flyweight Factory(Flyweight Factory)の役割:FlyweightFactoryの役割の作成と管理を担当します。クライアントオブジェクトがフライウェイトオブジェクトを要求すると、フライウェイトファクトリは、システムの要件を満たすフライウェイトオブジェクトがあるかどうかを確認し、存在する場合は顧客に提供します。存在しない場合は、新しいフライウェイトオブジェクトを提供します。作成されます。

関係図は次のとおりです。

フライ級モデル

コード

UnsharedConcreteFlyweight

フライ級

ConcreteFlyweight

FlyweightFactory

コードテスト

試験結果:

具体享元a被创建!
具体享元a已经存在,被成功获取!
具体享元a已经存在,被成功获取!
具体享元b被创建!
具体享元b已经存在,被成功获取!
具体享元a被调用,非享元信息是:第1次调用a
具体享元a被调用,非享元信息是:第2次调用a
具体享元a被调用,非享元信息是:第3次调用a
具体享元b被调用,非享元信息是:第1次调用b
具体享元b被调用,非享元信息是:第2次调用b

ある意味で、それはシングルトンパターンに少し似ていますか?

フライ級モデルについての考え

プロジェクトに類似または同一のオブジェクトが多数ある場合、フライウェイトモードを使用すると、メモリのオーバーヘッドを大幅に節約できます。

バッファプールシナリオなど、Flyweightモードを使用できる特定のシナリオがあるかどうかは誰でも考えることができます。

別の問題があります。Flyweightモデルのコアはデータ共有にあり、スレッドのセキュリティが低下する可能性があります。フライウェイトモードを使用する場合は、スレッドセーフを考慮する必要があります。

過去におすすめ

QRコードをスキャンして、よりエキサイティングになります。または、WeChatLvshen_9を検索すると、返信してバックグラウンドで情報を取得できます

  1. 回复"java" 获取java电子书;

  2. 回复"python"获取python电子书;

  3. 回复"算法"获取算法电子书;

  4. 回复"大数据"获取大数据电子书;

  5. 回复"spring"获取SpringBoot的学习视频。

  6. 回复"面试"获取一线大厂面试资料

  7. 回复"进阶之路"获取Java进阶之路的思维导图

  8. 回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)

  9. 回复"总结"获取Java后端面试经验总结PDF版

  10. 回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)

  11. 回复"并发导图"获取Java并发编程思维导图(xmind终极版)

もう1つ:[マイベネフィット]をクリックして、さらに驚きを持ってください。

おすすめ

転載: blog.csdn.net/wujialv/article/details/110132642