プロキシ モードの役割は、このオブジェクトへのアクセスを制御するために他のオブジェクトにプロキシを提供することです。
場合によっては、クライアントが別のオブジェクトを直接参照したくない、または参照できない場合があり、プロキシ オブジェクトがクライアントとターゲット オブジェクトの間の 仲介者 として機能することがあります。
抽象ロール: 実オブジェクトとプロキシ オブジェクト間の共通インターフェイスを宣言します。
プロキシ ロール: プロキシ オブジェクト ロールには、実際のオブジェクトへの参照が内部的に含まれているため、実際のオブジェクトを操作できるようになります。同時に、プロキシ オブジェクトは、実際のオブジェクトと同じインターフェイスを提供して、置き換えることができます。いつでも本物のオブジェクトを。同時に、プロキシ オブジェクトは、実際のオブジェクトに対して操作を実行するときに他の操作を追加できます。これは、実際のオブジェクトをカプセル化することと同じです。
実際のロール: プロキシ ロールによって表される実際のオブジェクトは、最終的に参照したいオブジェクトです。
図: 次のプログラムは、静的プロキシを使用して大文字変換関数を実装します。
インターフェースクラス ISomeService:
package com.ietree.basicskill.designpattern.staticproxy;/** * 接口类 * * @author Root */public interface ISomeService { String doFirst(); void doSecond(); }
実装クラス SomeServiceImpl:
package com.ietree.basicskill.designpattern.staticproxy;/** * 实现类 * * @author Root */public class SomeServiceImpl implements ISomeService { @Overridepublic String doFirst() { System.out.println("执行doFirst()..."); String result = "abcde";return result; } @Overridepublic void doSecond() { System.out.println("执行doSecond()..."); } }
プロキシクラス SomeServiceProxy:
SomeServiceProxy =
テストクラス Main:
package com.ietree.basicskill.designpattern.staticproxy;public class Main {public static void main(String[] args) { ISomeService service = new SomeServiceProxy();String result = service.doFirst(); System.out.println(result); service.doSecond(); } }
上記をフォローしたい方はメソッド (静的プロキシ) プロキシ パターンを使用すると、実際の役割はプロキシ オブジェクトの内部プロパティとしてすでに実装されている必要があります。
しかし、実際の使用では、実際の役割は代理役割に対応する必要がありますが、大量に使用すると、さらに、実際の役割が事前にわかっていない場合、クラスの急激な拡大につながります。プロキシを使用しますか?この問題は、Javaの動的プロキシクラスによって解決できます。
以上がデザインパターンにおけるプロキシパターンの役割の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。