java代理模式的小小体会

日志

java代理模式的小小总结 2011.11.13 阅读(0)
  • 转载
  • 分享
  • 评论
  • 复制地址
  • 编辑
          《易学设计模式》这本书中对代理模式的定义如下:给一个对象提供一个代理对象,由这个代理对象控制对原对象的引用,使代理类在客户端和原对象之间起到一个中介作用。
         原理,抽象目标类(接口),具体目标类,和代理类(proxy)
         实例代码如下(这个简单的例子,是我自己根据该书的例子改编的)
/**
*抽象的类
* @author dell
*/
public interface Text {
    void text();
}
      
/**
*具体的实现类
* @author dell
*/
public class TextImp implements Text{
    @Override
    public void text() {
       System.out.println("hello world");
    }
   
}
/**
*代理类
* @author dell
*/
public class TextProxy implements Text{
    TextImp textImp;//真实对象引用
    public TextProxy(TextImp textImp) {
        this.textImp = textImp;
    }
   
    @Override
    public void text() {
        textImp.text();
    }
   
}

public class Moshi {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        TextProxy tp = new TextProxy(new TextImp());
        tp.text();
       
    }
}
输出:hello word
通过这三个类可以发现代理模式具有以下特点:
一·代理对象(TextProxy)实现了与真实对象(TextImp)相同的接口(Text),以便在任何时刻都能代替真实对象进行相同的操作
二 代理类内部有对真实对象的引用,从而可以操作真实对象
三,代理模式可以在实现真实对象的功能时,也可以添加其他操作,真实对象最为代理对象的属性,专业点或者说代理类对真实类进行了封装
四,其实真正起到作用的还是真实类里面实现的接口的方法。
   其实按照面向对象语言的多态性来说,上面的代理类,可以这么定义,即把真实对象的引用换成接口Text的引用,这样做的好处是,对方看你的源代码时,虽然看到了代理类的方法,却不知该方法的具体是怎么实现的,也就是起到隐藏了具体实现的作用,改动后的代理类代码如下public class TextProxy1 implements Text{
    Text text;//接口引用
    public TextProxy1(Text text) {
        this.text = text;
    }
   
    @Override
    public void text() {
        text.text();
    }    
}
public class Moshi {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        TextProx1y tp = new TextProxy1(new TextImp());
        tp.text();

    }
}
输出:hello word
自己做的那个”图书销售管理系统“除了应用工厂模式,java反射机制之外就应用了这种模式,小小地偷着乐了一把,但是”常用刀剑者,死于刀剑下“,一定要避免过度地使用设计模式,只有对面向对象的设计原则有了深刻的领悟,才能用好设计模
(网摘):代理模式的应用场景之一:假设 有一组对象都实现了相同的接口,实现了同样的方法,但这组对象需要有单独的方法,传统的笨方法是在每一个应用端都加上这个单独的方法,这样代码的耦合性太高,此时代理模式可以解决这个方法式






你可能感兴趣的:(java代理模式的小小体会)