ホームページ > Java > &#&チュートリアル > デザイン パターン シリーズ — 構造の章: プロキシ パターン

デザイン パターン シリーズ — 構造の章: プロキシ パターン

Linda Hamilton
リリース: 2025-01-21 04:06:16
オリジナル
732 人が閲覧しました

デザインパターン: 一般的なソフトウェア開発の課題に対する効率的なソリューション。 これらの事前構築されたソリューションは、「車輪の再発明」を防ぎ、頻繁に発生する問題に対する答えを提供します。 ただし、それらは万能ではありません。開発者は、特定のプロジェクトのニーズにパターンを適応させる必要があります。

デザイン パターンは、創造、構造、行動の 3 つのグループに分類され、それぞれに明確な特徴があります。この記事では、一般的な構造パターンであるプロキシ パターンに焦点を当てます。

プロキシ パターンを理解する

プロキシ パターンを把握するには、次のシナリオを検討してください。ユーザー データにアクセスするには、まず別のサービス経由で JWT (JSON Web トークン) を取得する必要があります。

問題

プロキシ パターンを使用しないと、各ユーザー データ リクエストに JWT リクエストが必要となり、特に JWT サービスが遅い場合やトークンの有効期限が効率的に管理されていない場合にパフォーマンスのボトルネックが発生します。この非効率的なアプローチを以下に示します。

Design Patterns Serie — Structural Chapter: Proxy Pattern

この繰り返しの JWT フェッチにより、データの取得が遅くなります。

Design Patterns Serie — Structural Chapter: Proxy Pattern

解決策はプロキシ パターンにあります。

解決策

プロキシ パターンは、クライアントと実際のオブジェクト (JWT サービス) の間に中間層 (プロキシ) を導入します。この仲介者はアクセスを管理し、キャッシュやセキュリティ チェックなどの機能を追加します。

Design Patterns Serie — Structural Chapter: Proxy Pattern

これにより、JWT がキャッシュされ、JWT サービスへの呼び出しが削減されるため、効率が向上します。 プロキシ パターンを使用して改善されたアーキテクチャは次のようになります:

Design Patterns Serie — Structural Chapter: Proxy Pattern

クラス図は実装を示しています。

Design Patterns Serie — Structural Chapter: Proxy Pattern

クラス図は以下を示します:

  • 件名 (JWTService): プロキシと実際の JWT サービスの両方によって実装される共通インターフェイス。 requestJWT() メソッドを定義します。
  • 実際のサブジェクト (JWTServiceImpl): JWTService を実装し、実際の JWT 生成機能を提供します。
  • プロキシ (JWTServiceProxy): JWTServiceImpl へのアクセスを制御します。キャッシュと検証ロジックが追加されます。

JWT 生成のためのプロキシ パターンの実装

完全なコード例は、プロキシ パターン リポジトリ で入手できます。 以下は主要なコンポーネントです:

JWT オブジェクト

JWT クラス (Java 16 レコードを使用) は JWT データ (トークン、有効期限、作成時間) を保存し、有効性をチェックするための validateJWT() メソッドを含みます。

<code class="language-java">public record JWT(String token, long expirationTime, long creationTime) {
    public boolean validateJWT(){
        long currentTimeInSeconds = System.currentTimeMillis() / 1000;
        return currentTimeInSeconds < creationTime + expirationTime;
    }
}</code>
ログイン後にコピー

主題 (インターフェース)

JWTService インターフェースは requestJWT() メソッドを宣言します。

<code class="language-java">public interface JWTService {
    JWT requestJWT();
}</code>
ログイン後にコピー

本当の主題

JWTServiceImplJWTService を実装し、モック JWT を生成します。

<code class="language-java">public class JWTServiceImpl implements JWTService {
    @Override
    public JWT requestJWT() {
        return new JWT(generateToken(), 5, System.currentTimeMillis() / 1000);
    }

    // ... generateToken() method (simplified for this example) ...
}</code>
ログイン後にコピー

プロキシ

JWTServiceProxy は JWT をキャッシュして検証します。

<code class="language-java">public class JWTServiceProxy implements JWTService {
    private final JWTService jwtService;
    private JWT jwt;

    public JWTServiceProxy() {
        this.jwtService = new JWTServiceImpl();
    }

    @Override
    public JWT requestJWT() {
        if (jwt == null || !jwt.validateJWT()) {
            jwt = jwtService.requestJWT();
        }
        return jwt;
    }
}</code>
ログイン後にコピー

プロキシ パターンのテスト

簡単なテストでプロキシのキャッシュ動作を示します。

<code class="language-java">// ... (Main class with logging and Thread.sleep(5000) to simulate token expiration) ...</code>
ログイン後にコピー

出力は、最初に 1 つの JWT のみが生成され、最初の JWT の有効期限が切れた後にのみ新しい JWT が生成されることを示しており、プロキシのキャッシュと検証の機能を示しています。

Design Patterns Serie — Structural Chapter: Proxy Pattern

結論

プロキシ パターンは、ソフトウェアの効率とセキュリティを強化します。 システム アーキテクチャと潜在的なボトルネックを慎重に検討することで、開発者はこのパターンを活用して、より堅牢で保守しやすいアプリケーションを作成できます。 パターンを特定のニーズに合わせて調整することを忘れないでください。 コーディングを楽しんでください! ❤️

以上がデザイン パターン シリーズ — 構造の章: プロキシ パターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート