Notes sur les modèles de conception Java pour les débutants - Proxy statique du modèle de proxy

Mode proxy

 

1. Objectif :
fournir un proxy pour d'autres objets afin de contrôler l'accès à cet objet.

(Fournissez un objet proxy pour un objet, et l'objet proxy contrôle la référence de l'objet spécifique. )

 

2.Participants :

• Sujet abstrait (Subject) : Définit l'interface commune entre le sujet réel (Real Subject) et le proxy (Proxy) , afin que le proxy (Proxy) puisse être utilisé partout où le sujet réel (Real Subject) est utilisé .

• Sujet réel : définitl'entité représentée par le proxy .

• Procuration:

   1) Il contient une référence à l'objet Sujet réel en interne, afin que l'objet Sujet réel puisse être exploité ;

   2) En même temps, l'objet sujet proxy (Proxy) fournit la même interface sujet abstrait (Subject) que l'objet sujet réel (Real Subject) , afin qu'il puisse remplacer le sujet réel (Real Subject) à tout moment ;

   3) Contrôler la référence au sujet réel (Real Subject) et être responsable de la création (ou de la suppression) de l'objet sujet réel en cas de besoin ;

   4) Dans le même temps, l'objet Proxy peut attacher d'autres opérations lors de l'exécution d'opérations sur l' objet Sujet réel , au lieu de simplement transmettre l'appel à l'objet Sujet réel .

 

3. Structure :



 

 

Personnellement, je pense que le modèle d’agent est un modèle de conception plus facile à comprendre.

Ou comprenez le modèle d’agence à travers la vie réelle.

Dans la vraie vie, nous entendons souvent le mot agent. En traitant avec des agents, les acheteurs peuvent obtenir de meilleurs services et plus, et les vendeurs peuvent également se concentrer sur la production de produits sans avoir à dépenser plus d'énergie sur d'autres choses supérieures.

 

Prenons l'exemple de l'achat d'une voiture. Dans la vraie vie, lorsque vous achetez une voiture auprès d'un vendeur ( Sujet abstrait) , vous n'achetez généralement pas une voiture directement auprès du constructeur ( Sujet réel) . Vous pouvez vous rendre dans un magasin 4S. ( Rôle de proxy ) Achetez une voiture et obtenez plus de services là-bas.

 

Voyons comment cela est implémenté dans le code Java :

Vendeur de voitures (thème abstrait) :

/**
 * 抽象主题(Subject)
 * 
 * 汽车的销售商
 *
 */
public interface CarSeller {
	
	/*
	 * 销售汽车
	 */
	public Object sellCars(int type);

}

 

Constructeur Audi (thème réel) :

/**
 * 真实主题(Real Subject)角色
 * 奥迪厂家
 *
 */
public class AudiCarFactory implements CarSeller {

	/*
	 * 实现了抽象主题(Subject)角色的方法
	 */
	public Object sellCars(int type) {
		System.out.println("奥迪工厂出售汽车。");
		if(type == 1){
			return "AudiA6";
		}else{
			return "AudiA8";
		}
	}

}

 

Concessionnaire automobile (agence) : 

**
 * 代理(Proxy)角色
 * 
 * 汽车代理商
 * (这个代理商销售的是奥迪汽车)
 *
 */
public class CarProxy implements CarSeller {
	
	private AudiCarFactory carFactory = new AudiCarFactory();
	
	/*
	 * 同样也实现了抽象主题(Subject)角色的方法
	 */
	public Object sellCars(int type) {
		
//		售前服务
		serveBeforeSell();
		
//		代理奥迪厂家来销售汽车
		Object car = carFactory.sellCars(type);
		System.out.println("由代理商从厂家取得客户需要的汽车");

//		售后服务
		serveAfterSell();
		
		return car;
	}
	
	protected void serveBeforeSell(){
		System.out.println("汽车代理商为客户提供了一些售前服务");
	}
	
	protected void serveAfterSell(){
		System.out.println("汽车代理商为客户提供了一些售后服务");
	}

}

 

Client (appel client) :

/**
 * 客户端调用
 */
public class Customer {
	
	public static void main(String[] args){
		
//		顾客找到代理商
		CarSeller carSeller = new CarProxy();
		
//		由代理商来销售汽车,可以发现代理商在销售给顾客汽车时,为顾客提供了更多的其他服务
		Object car = carSeller.sellCars(1);
		System.out.println("顾客从代理商那里买了一辆" + car);
		
	}
}

 

résultat de l'opération :

汽车代理商为客户提供了一些售前服务
奥迪工厂出售汽车。
由代理商从厂家取得客户需要的汽车
汽车代理商为客户提供了一些售后服务
顾客从代理商那里买了一辆AudiA6

 

Quels sont les avantages du modèle d’agence ?

Grâce au mode proxy, un intermédiaire est ajouté entre le client et le sujet réel (Real Subject) , ce qui empêche le client d'accéder directement au sujet réel (Real Subject) . Cela présente les avantages suivants :

1) Comme le montre l'exemple ci-dessus, certaines opérations supplémentaires peuvent être ajoutées avant ou après avoir accédé au sujet réel ;

2) Possibilité de masquer certains détails d'accès ;

3) Certains contrôles peuvent être ajoutés pour accéder à des sujets réels, comme la vérification de sécurité, etc.

 

D'après l'exemple ci-dessus, on peut constater que dans le modèle proxy, le rôle Sujet réel doit exister à l'avance et être utilisé comme attribut interne de l' objet Proxy . Il s'agit en fait du mode proxy statique .

En mode proxy statique, la relation entre le proxy (Proxy) et le sujet réel (Real Subject) a été définie au préalable dans le code et est fixe.

 

 

 Imaginez, si un agent augmente ou modifie les types de produits qu'il représente (par exemple : agissant en tant qu'agent pour les voitures BMW),

1) Alors, avez-vous besoin de modifier la classe proxy ? Cela affectera la stabilité du système existant.

2) Si vous ne modifiez pas la classe proxy existante , mais ajoutez une nouvelle classe proxy ( le risque de code lié à l'ajout d'une nouvelle classe est bien inférieur à celui de la modification du code d'une classe existante ), assurez-vous qu'un rôle de sujet réel correspond à un proxy. (Proxy) , ce qui entraînera une forte expansion de la classe.

 

Ce couplage étroit n’est pas propice à l’expansion du système et à la réponse aux évolutions futures de la demande.

Existe-t-il donc un moyen pour le système de lier dynamiquement la relation entre le sujet réel (Real Subject) et le proxy (Proxy) selon les besoins pendant l'exécution ?

Dynamic Proxy donne une solution, voirNotes sur les modèles de conception Java pour les débutants - Proxy dynamique du modèle de proxy 

 

Je suppose que tu aimes

Origine blog.csdn.net/louis_lee7812/article/details/83803450
conseillé
Classement