Javaデザインモードのプロキシモードと装飾モードの実例について詳しく説明します。
本論文の例は、Java設計モードのプロキシモードと装飾モードを説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
この二つのモードを一緒に置いたのは、この二つのパターンがほぼ同じだということを発見したからです。
インターネットで資料を調べたら、やはり違いがあります。私たちは勉強すると同時に、このような困惑をはっきりさせます。
定義:
プロキシモードは、他のオブジェクトに対してプロキシを提供し、このオブジェクトへのアクセスを制御する。
装飾モードは、オブジェクトにいくつかの追加的な役割を動的に追加します。
プロキシモードは、一つのオブジェクトを再びパッケージ化し、その後パッケージの対象にアクセスすればいいということがよく分かります。
代理オブジェクトが代理オブジェクトに取って代わられたからです。
装飾モードは、オブジェクトに機能を追加し、イメージとしては、サービスマンとして立ちながらサービスを提供します。
基本的な違いとしては、モデルオブジェクトが元のオブジェクトに代わるのではなく、一方でサービスを提供することです。
本文で述べた観点はすべて個人のために理解し、本人にだけ責任を持つ。
以下の例を示します。
プロキシモード
本論文で述べたように、皆さんのjavaプログラムの設計に役に立ちます。
この二つのモードを一緒に置いたのは、この二つのパターンがほぼ同じだということを発見したからです。
インターネットで資料を調べたら、やはり違いがあります。私たちは勉強すると同時に、このような困惑をはっきりさせます。
定義:
プロキシモードは、他のオブジェクトに対してプロキシを提供し、このオブジェクトへのアクセスを制御する。
装飾モードは、オブジェクトにいくつかの追加的な役割を動的に追加します。
プロキシモードは、一つのオブジェクトを再びパッケージ化し、その後パッケージの対象にアクセスすればいいということがよく分かります。
代理オブジェクトが代理オブジェクトに取って代わられたからです。
装飾モードは、オブジェクトに機能を追加し、イメージとしては、サービスマンとして立ちながらサービスを提供します。
基本的な違いとしては、モデルオブジェクトが元のオブジェクトに代わるのではなく、一方でサービスを提供することです。
本文で述べた観点はすべて個人のために理解し、本人にだけ責任を持つ。
以下の例を示します。
package test.design.proxydecorator;
/**
* :
* @author lushuaiyin
*
*/
public interface Eatable {
void eatFood();
}
package test.design.proxydecorator;
/**
*
* @author lushuaiyin
*
*/
public class Man implements Eatable{
@Override
public void eatFood() {
System.out.println("I am eating food! Happy!");
}
}
以上は一般的なインターフェースと実装であり、以下はモードの例である。プロキシモード
package test.design.proxydecorator;
/**
*
* , 。
* , , 。
* 。
* 。
* @author Administrator
*
*/
public class ProxyMan implements Eatable{
private Eatable eatable;
public ProxyMan(){
System.out.println("proxy: I am proxy object. I will help you create a object of Man that wnt to be proxyed");
this.eatable=new Man();
// , , 。
}
@Override
public void eatFood() {
// , , 。
System.out.println("proxy: I know you are hungry,so I cook for you some food.");
this.eatable.eatFood();
System.out.println("proxy: Now you eat up food. Let me help you clean the dishes.");
}
}
装飾モード
package test.design.proxydecorator;
/**
* .
* , , .
* , 。
* @author lushuaiyin
*
*/
public abstract class DecoratorMan {
protected Eatable eatable;
// set ( ) 。
// , , 。
public DecoratorMan(Eatable eatable){
this.eatable=eatable;
}
public void eatFood(){
this.eatable.eatFood();
};
}
package test.design.proxydecorator;
/**
*
* 。 , 。
* , , , 。
* @author lushuaiyin
*
*/
public class Decorator extends DecoratorMan{
public Decorator(Eatable eatable) {
super(eatable);
}
//
public void eatFood(){
decoratorServiceCookFood();//
super.eatable.eatFood();
decoratorServiceCleanDishes();//
};
public void decoratorServiceCookFood(){
System.out.println("Decorator: I know you are hungry,so I cook for you some food.");
}
public void decoratorServiceCleanDishes(){
System.out.println("Decorator: Now you eat up food. Let me help you clean the dishes.");
}
}
最も重要なのは呼び出しです。これもこの2つのモードの主な違いです。
package test.design.proxydecorator;
public class TestMain {
/**
* @param args
*/
public static void main(String[] args) {
//
System.out.println(" :");
Man m1=new Man();//
m1.eatFood();
System.out.println("---------------------------");
// , 。
// , ; , 。 。
Eatable e1=new ProxyMan();
e1.eatFood();
System.out.println("------------ ---------------");
System.out.println(" :");
Man m2=new Man();//
m2.eatFood();
System.out.println("---------------------------");
// .
// , , 。
Decorator d1=new Decorator(m2);
d1.eatFood();
}
}
印刷:
:
I am eating food! Happy!
---------------------------
proxy: I am proxy object. I will help you create a object of Man that wnt to be proxyed
proxy: I know you are hungry,so I cook for you some food.
I am eating food! Happy!
proxy: Now you eat up food. Let me help you clean the dishes.
------------ ---------------
:
I am eating food! Happy!
---------------------------
Decorator: I know you are hungry,so I cook for you some food.
I am eating food! Happy!
Decorator: Now you eat up food. Let me help you clean the dishes.
もっと多くのjava関連の内容に興味がある読者は当駅のテーマを見ることができます。「Javaデータ構造とアルゴリズム教程」、「Java操作DOMノード技術のまとめ」、「Javaファイルとディレクトリの操作テクニックのまとめ」、「Javaキャッシュ操作テクニックのまとめ」本論文で述べたように、皆さんのjavaプログラムの設計に役に立ちます。