エージェンシーモデルに関しては、わかりやすいです。たとえば、コンサートチケットを購入した場合、自分で購入するのは難しく、スカルパーにしか行けません。スカルパーは、列車のチケットを販売するエージェント(非公式)です。
開発では、プロキシモデルは非常に一般的です。クラスのオブジェクトは直接生成されず、オブジェクトはプロキシクラスを介して生成されます。次に、プロキシによって生成されたオブジェクトの機能を強化できます。一般に、オブジェクトの機能を強化したい場合は、プロキシモードを使用できます。
プロキシモデルとは
「「別のオブジェクトへのアクセスを制御するための代理またはプレースホルダーを提供します(このオブジェクトへのアクセスを制御するために、他のオブジェクトのプロキシを提供します)。
」
プロキシモデルにはいくつかの便利な機能があると思います。
「「」
ターゲットオブジェクトを保護できます。ターゲットオブジェクトに直接アクセスするのではなく、プロキシオブジェクトを介してアクセスします。
プロキシオブジェクトは、ターゲットオブジェクトの機能を拡張できます
クライアントはターゲットオブジェクトに直接アクセスすることはできませんが、プロキシオブジェクトを介してのみアクセスできます。これにより、必然的にアクセス速度が低下します。同時に、プロキシオブジェクトが追加され、システムの複雑さも増します。
では、エージェンシーモデルの要素は何ですか?
「「」
抽象サブジェクト(サブジェクト)クラス:インターフェイスまたは抽象クラスを介して、実際のサブジェクトおよびプロキシオブジェクトによって実装されるビジネスメソッドを宣言します。
Real Subjectクラス:抽象サブジェクトで具体的なビジネスを実装します。これは、プロキシオブジェクトと最終的に参照されるオブジェクトによって表される実際のオブジェクトです。
プロキシクラス:実際のテーマと同じインターフェイスを提供します。実際のテーマへの参照が含まれています。実際のテーマの機能にアクセス、制御、または拡張できます。
これらの要素間の関係は次のとおりです。
エージェンシーモデル
コード
コードは次のとおりです。
件名
public interface Subject {
void request();
}
プロキシ
public class Proxy implements Subject {
private RealSubject realSubject;
@Override
public void request() {
if (realSubject == null) {
realSubject = new RealSubject();
}
preRequest();
realSubject.request();
postRequest();
}
public void preRequest() {
System.out.println("访问真实主题之前的预处理!!!");
}
public void postRequest() {
System.out.println("访问真实主题之后的后续处理!!!");
}
}
RealSubject
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("真实类访问方法!!!!");
}
}
テストは次のとおりです。
public class ProxyTest {
public static void main(String[] args){
Proxy proxy = new Proxy();
proxy.request();
}
}
访问真实主题之前的预处理!!!
真实类访问方法!!!!
访问真实主题之后的后续处理!!!
動的エージェントについて
プロキシモードのより高度なアプリケーションについては、私のこの記事を参照してください。