2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Proxy Pattern est un modèle de conception structurelle qui contrôle l'accès à un autre objet en introduisant un objet proxy. Cet objet proxy peut fournir des fonctionnalités supplémentaires à l'objet proxy, telles que le contrôle d'accès, l'initialisation différée, la journalisation ou l'accès au réseau.
agent distant:
agent virtuel:
agent de protection:
Un guidage intelligent:
Ce qui suit est un exemple simple d'implémentation du modèle de proxy, montrant comment contrôler l'accès à un objet réel via un objet proxy.
public interface Subject {
void request();
}
Subject
L'interface définit unrequest
Méthode, c'est la méthode que l'objet réel et l'objet proxy doivent implémenter.public class RealSubject implements Subject {
public void request() {
System.out.println("RealSubject: Handling request.");
}
}
RealSubject
classe implémentéeSubject
Interfacerequest
Méthode, représentant la classe qui gère réellement la requête.public class Proxy implements Subject {
private RealSubject realSubject;
public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
}
public void request() {
if (this.checkAccess()) {
this.realSubject.request();
this.logAccess();
}
}
private boolean checkAccess() {
// 检查访问权限
System.out.println("Proxy: Checking access prior to firing a real request.");
return true;
}
private void logAccess() {
// 记录请求日志
System.out.println("Proxy: Logging the time of request.");
}
}
Proxy
classe implémentéeSubject
interface et détient unRealSubject
objet.request
Dans la méthode, la classe proxy vérifie d'abord les autorisations d'accès, puis appelle l'objet réelrequest
méthode, et enfin enregistrer le journal des demandes.public class Client {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
Proxy proxy = new Proxy(realSubject);
proxy.request();
}
}
Client
classe crééeRealSubject
etProxy
objet, à traversProxy
Appel d'objetrequest
méthode pour contrôler leRealSubject
Accéder.Isolement:
sécurité:
Évolutivité:
Intelligent:
complexité du code:
Temps de réponse:
Difficulté de conception:
Client
|
v
Subject <---- Proxy <---- RealSubject
Le modèle de proxy fournit un moyen efficace de contrôler et de gérer l'accès aux objets. En utilisant des proxys, vous pouvez ajouter diverses fonctions tout en gardant claires les responsabilités des objets métier. Ce mode est particulièrement adapté aux scénarios nécessitant un contrôle d'accès et d'autres opérations de prétraitement sur les objets métier.
Facade Pattern est un modèle de conception structurelle qui facilite l'utilisation des sous-systèmes complexes en fournissant une interface unifiée pour accéder à un groupe d'interfaces dans le sous-système. Le modèle de façade définit une interface de haut niveau qui rend ce sous-système plus facile à utiliser.
Simplifiez les interfaces avec les systèmes complexes:
Hiérarchie:
Système découplé:
Ce qui suit est un exemple simple d'implémentation du modèle Facade, montrant comment simplifier l'utilisation des sous-systèmes via des classes de façade.
public class SubsystemA {
public void operationA() {
System.out.println("SubsystemA: operationA");
}
}
public class SubsystemB {
public void operationB() {
System.out.println("SubsystemB: operationB");
}
}
public class SubsystemC {
public void operationC() {
System.out.println("SubsystemC: operationC");
}
}
public class Facade {
private SubsystemA subsystemA;
private SubsystemB subsystemB;
private SubsystemC subsystemC;
public Facade() {
this.subsystemA = new SubsystemA();
this.subsystemB = new SubsystemB();
this.subsystemC = new SubsystemC();
}
public void operation1() {
System.out.println("Facade: operation1");
subsystemA.operationA();
subsystemB.operationB();
}
public void operation2() {
System.out.println("Facade: operation2");
subsystemB.operationB();
subsystemC.operationC();
}
}
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.operation1();
facade.operation2();
}
}
Classe de sous-système:
SubsystemA
, SubsystemB
, et SubsystemC
Il s'agit de la classe d'implémentation spécifique du sous-système, et chaque classe possède sa propre méthode de fonctionnement unique.Classe d'apparence:
Facade
Les classes contiennent des objets de sous-système et fournissent des interfaces simplifiéesoperation1
etoperation2
pour appeler les fonctions du sous-système.code client:
Client
cours réussiFacade
classe à appeleroperation1
etoperation2
, simplifiant ainsi l'utilisation de sous-systèmes complexes.Interface simplifiée:
couplage lâche:
meilleure superposition:
Ne respecte pas le principe d'ouverture-fermeture:
Peut entraîner des problèmes de performances:
Client
|
v
Facade ----> SubsystemA
----> SubsystemB
----> SubsystemC
Le modèle Facade facilite le travail avec des sous-systèmes complexes en fournissant une interface simplifiée. Il convient aux scénarios dans lesquels il est nécessaire de simplifier l'interface du sous-système, de réduire l'interaction directe entre le client et le sous-système et de découpler la hiérarchie du système. Bien qu’il puisse potentiellement violer le principe ouvert-fermé, dans la plupart des cas, ses avantages dépassent de loin ses inconvénients, rendant la conception du système plus claire et plus facile à maintenir.