エージェントモードの説明
注:名前が示すように、1つのクラスを使用して別のクラスを置き換えてメソッド関数を実行することです。このパターンは、装飾モードに少し似ています。違いは、プロキシモードがクライアントを置き換えてプロキシオブジェクトクラスを初期化し、装飾モードはインターフェイスまたは初期デコレータのパラメーターへの参照によって実行されることです。
動的なオブジェクト指向言語では、プロキシモードはプロキシクラスを制御および変更する役割を果たし、プロキシクラスで完全に隠された保護された役割を果たします。プロキシクラスは間接的に初期化され、必要な場合にのみ呼び出されます。
シーンの説明:
家を借りる非常に一般的な例。テナントは家を借りたいと思っており、家主は家を借りたいと思っていますが、テナントも家主も家を見つけたり、誰かが家で家を見るのを待つ時間はないので、彼らは一緒に不動産業者を見つけに行きます。家主は、部屋を賃貸と販売のために代理店に委ねます。適切な人がいる場合、エージェントは部屋を見て、それを見てお金を払ってそれを借ります。テナントは、代理店が必要とする部屋の場所を支援するために家を代理店に委託します。エージェントがテナントを見つけた後、2人はそれを借りるためにお金を支払い、テナントはそれを彼が住んでいる場所に借りることができます。
インスタンスソースコード
上記の例に従って達成します。
1。家主レンタルカテゴリ。
コードコピーは次のとおりです。
関数fangdong(){
this.room = 'ルーム名';
}
fangdong.prototype.chuzu = function(){
console.log( '土地所有者はrents room:' + this.room);
}
2。中間エージェントクラス:
コードコピーは次のとおりです。
function proxy(){
this.fangdong = new Fangdong();
}
proxy.prototype.chuzu = function(){
this.fangdong.chuzu();
console.log( 'レンタル後の代理店料金を持ち運ぶ');
}
3。使用方法:
コードコピーは次のとおりです。
//テナントはエージェントに家を見つけるのを手伝うように頼みます。
var proxy = new Proxy();
proxy.chuzu();
上記の使用法を見てください。プロキシクラスは、クライアント側ではまったく利用できません。特定のビジネスロジックプロセスを保護する必要があるシナリオでよく使用できるプロキシクラスを使用するだけです。プロキシモードを使用すると、保護する必要があるプロキシクラスでよく使用できます。
その他の指示
デコレーターモードと同様に、プロキシモードは、拡張および閉じた変更に対するオープン性のオブジェクト指向の思考の原理もよく反映しています。
プロキシモードでは、インターフェイスまたは抽象クラスを使用して共通のインターフェイスを調整できます。(以下はJavaプロキシモードを提供します)
1。抽象クラスの要約メソッド。
コードコピーは次のとおりです。
パブリックアブストラクトクラスハウス{
public void abstract chuzu();
}
パブリッククラスのファングドンは家を拡張します{
プライベートストリングルーム= "ルーム名";
@オーバーライド
public void chuzu(){
System.out.println(ルーム);
}
}
パブリッククラスのプロキシは家を拡張します{
プライベートファンドンファンドン;
public proxy(){
this.fangdong = new Hangdong();
}
@オーバーライド
public void chuzu(){
this.fandong.chuzu();
system.out.println( "賃貸後の代理店料金を支払う");
}
}
//使用
House House = new Proxy();
house.chuzu();
2。インターフェイス方法:
コードコピーは次のとおりです。
インターフェイスハウス{
public void chuzu();
}
パブリッククラスのファングドンは家を実装しています{
プライベートストリングルーム= "ルーム名";
@オーバーライド
public void chuzu(){
System.out.println(ルーム);
}
}
パブリッククラスのプロキシは家を実装しています{
プライベートファンドンファンドン;
public proxy(){
this.fangdong = new Hangdong();
}
@オーバーライド
public void chuzu(){
this.fandong.chuzu();
system.out.println( "賃貸後の代理店料金を支払う");
}
}
//使用
House House = new Proxy();
house.chuzu();