Cet article présente principalement le mode proxy et le mode décoration des modèles de conception Java. Il analyse les concepts, les fonctions, les méthodes d'implémentation Java et les précautions d'utilisation associées du mode proxy et du mode décoration avec des exemples spécifiques. suivant
Les exemples de cet article décrivent le mode proxy et le mode de décoration des modèles de conception Java. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
La raison pour laquelle je parle de ces deux modes ensemble est parce que j'ai trouvé que ces deux modes sont presque identiques !
J'ai également recherché des informations sur Internet et découvert qu'il existe des différences entre les deux. Nous avons également clarifié cette confusion en étudiant.
Définition :
Le modèle de proxy fournit un proxy pour d'autres objets afin de contrôler l'accès à cet objet.
Le mode Décorateur ajoute dynamiquement des responsabilités supplémentaires à un objet.
Le mode proxy est facile à comprendre. Il s'agit d'encapsuler à nouveau un objet, puis d'accéder à l'objet encapsulé.
Parce que l'objet proxy a remplacé l'objet proxy.
Le mode Décoration ajoute des fonctions à un objet. L'image, c'est comme se tenir à l'écart en tant que serveur pour fournir des services.
La différence fondamentale est donc que l'objet en mode décoration est toujours là, ne remplaçant pas l'objet d'origine, mais fournissant des services à côté.
Les opinions exprimées dans cet article sont des interprétations personnelles et j'en suis seul responsable.
Ce qui suit est un exemple :
1 2 3 4 5 6 7 8 9 | package test.design.proxydecorator;
public interface Eatable {
void eatFood();
}
|
Copier après la connexion
1 2 3 4 5 6 7 8 9 10 11 12 | package test.design.proxydecorator;
public class Man implements Eatable{
@Override
public void eatFood() {
System.out.println( "I am eating food! Happy!" );
}
}
|
Copier après la connexion
Ce qui précède est l'interface et la mise en œuvre communes , ci-dessous est une instance de modèle
Modèle de proxy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package test.design.proxydecorator;
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." );
}
}
|
Copier après la connexion
Modèle de décoration
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package test.design.proxydecorator;
public abstract class DecoratorMan {
protected Eatable eatable;
public DecoratorMan(Eatable eatable){
this.eatable=eatable;
}
public void eatFood(){
this.eatable.eatFood();
};
}
|
Copier après la connexion
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package test.design.proxydecorator;
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." );
}
}
|
Copier après la connexion
Le plus important c'est l'appel, qui est aussi la principale différence entre ces deux modes !
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package test.design.proxydecorator;
public class TestMain {
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();
}
}
|
Copier après la connexion
Impression :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 代理模式:
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.
|
Copier après la connexion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!