Design Pattern "Proxy"

Design Pattern "Proxy" - Java - Programmation

Marsh Posté le 15-11-2005 à 11:34:59    

:hello:  
 
J'ai un petit problèe de compréhension de ce design pattern...
 
J'ai comprit (a peu pres) le pricipe, qui conciste à appliquer sur le proxy plutot que sur l'objet les methodes que l'on veut.
 
Sur cet exemple :

Code :
  1. /** Interface représentant un espace de dessin */
  2. public interface Canvas {
  3.   /** Ajout d'un objet graphique */
  4.   public void addGraphicElement( GraphicElement ge );
  5. }
  6. /**  Proxy pour l'espace de dessin */
  7. public class CanvasProxy implements Canvas {
  8.   private Canvas c;
  9.   public CanvasProxy( Canvas c ) {
  10.    this.c = c;
  11.   }
  12.   public void addGraphicElement( GraphicElement ge ) {
  13.    c.addGraphicElement( ge );
  14.   }
  15. }


 
Je ne comprend pas tres bien ce que fait la dernière ligne (c.addGraphic...(ge); ) vu que cette methode n'est pas définie :s
 
voici mon ptit prog pour essayer ce cas :
"main"

Code :
  1. public static void main(String[] args) {
  2.  interf_objet obj = null;
  3.  clas_obj oo = new clas_obj(obj);
  4.  oo.modif();
  5.  oo.donne();
  6. }


 
"interface"

Code :
  1. public interface interf_objet {
  2. public void modif();
  3. public int donne();
  4. }


 
"Proxy"

Code :
  1. public class clas_obj implements interf_objet {
  2. private interf_objet po;
  3. public clas_obj(interf_objet po2){
  4.  po = po2;
  5. }
  6. public void modif() {
  7.  // TODO Auto-generated method stub
  8.  System.out.println("Modif ..." );
  9.  po.modif();
  10. }
  11. public int donne() {
  12.  // TODO Auto-generated method stub
  13.  System.out.println("Donne ..." );
  14.  return po.donne();
  15. }
  16. }


 
Merci de m'eclairer   :jap:


---------------
.
Reply

Marsh Posté le 15-11-2005 à 11:34:59   

Reply

Marsh Posté le 15-11-2005 à 14:02:05    

didier1809 a écrit :


Code :
  1. /** Interface représentant un espace de dessin */
  2. public interface Canvas {
  3.   /** Ajout d'un objet graphique */
  4.   public void addGraphicElement( GraphicElement ge );
  5. }
  6. /**  Proxy pour l'espace de dessin */
  7. public class CanvasProxy implements Canvas {
  8.   // [...]
  9.   public void addGraphicElement( GraphicElement ge ) {
  10.    c.addGraphicElement( ge );
  11.   }
  12. }


 
Je ne comprend pas tres bien ce que fait la dernière ligne (c.addGraphic...(ge); ) vu que cette methode n'est pas définie :s


sisi elle est définie ;)


---------------
get amaroK plugin
Reply

Marsh Posté le 15-11-2005 à 14:03:43    

bobuse a écrit :

sisi elle est définie ;)


non, dans son exemple, la seule implementation de Canvas qu'il ait, c'est ce CanvasProxy..  va pas aller bien loin avec ça [:screetch]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 15-11-2005 à 15:13:39    

Le principe du design pattern proxy est d'offrir le meme interface qu'un autre object et de "relayer" les appels.
 
C'est ce que fait la method addGraphicElement du proxy de canvas. Ce que cette method fait, ce n'est pas vraiment important a mon avis.
 
fab

Reply

Marsh Posté le 15-11-2005 à 20:14:13    

bartleby a écrit :

Le principe du design pattern proxy est d'offrir le meme interface qu'un autre object et de "relayer" les appels.
 
C'est ce que fait la method addGraphicElement du proxy de canvas. Ce que cette method fait, ce n'est pas vraiment important a mon avis.
 
fab


 
Vu que tu à l'air de bien connaitre ce design pattern, est-ce que tu pourrais m'expliquer à l'aide d'un petit exemple complet ?
 
merci  :jap:


---------------
.
Reply

Marsh Posté le 16-11-2005 à 20:02:01    

Je me suis forme aux design patterns (les plus courants) sur ce site:
 
http://www.dofactory.com/Patterns/Patterns.aspx
 
Le proxy est ici (regarde le "structural code", c'est plus clair):
 
http://www.dofactory.com/Patterns/PatternProxy.aspx
 
Tu ne devrais avoir aucun mal a comprendre les exemples ; synthaxe C# et Java sont tres proches.
 
Pour synthetiser:
 
Tu as  
- un client
- un object  RealSubject qui fait le travail (ici, c'est afficher du text, mais ca peut etre un object situe sur une autre machine qui lance un travail de d'analyse de frequence par exemple.)
- un object Proxy qui pour chaque methodes appelle va appelle la methode du RealSubject.
 
RMI (Remote Method Invocation) et Corba fonctionnent avec ce pattern:
 
Tu manipules un proxy d'object local qui relait tes messages sur le server ou est reellement ton object distant.

Reply

Marsh Posté le 16-11-2005 à 21:31:12    

MErci por cette explication, j'avais eu un peu de mal a faire le rapprochement avec RMI, mais c'est vrai que c'est le meme principe :jap:


---------------
.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed