设计模式之代理模式的学习思考

来源:互联网 发布:同知 编辑:程序博客网 时间:2024/06/01 08:51

总觉得设计模式名字起的很好,形象地就代表它的功能。

正如代理模式,它是使用一个类代表另一个类的功能,属于结构型设计模式。

通过创建对象的对象,来提供访问功能的接口。

应用举例:快捷方式、代售点等。

设计:

  • 一个接口,两个分别实现类,一个是功能类,一个是代理类,代理类里有功能类对象的数据成员

代码:

interface Image{    void display();}class RealImage implements Image{    private String fileName;    private void loadFromDisk(String fileName){        System.out.println("Loading"+fileName);    }    public RealImage(String fileName){        this.fileName=fileName;        loadFromDisk(fileName);    }    public void display() {        System.out.println("Displaying:"+fileName);    }}class ProxyImage implements Image{     private RealImage realImage;     private String fileName;    public ProxyImage(String fileName) {        this.fileName = fileName;    }    public void display() {        if(realImage==null){            realImage=new RealImage(fileName);        }        realImage.display();    }}public class ProxyPatternDemo {    public static void main(String[] args) {        Image image=new ProxyImage("dog.jpg");        image.display();        System.out.println("");        //因为realImage已经被初始化了        image.display();    }}

输出:

Loadingdog.jpgDisplaying:dog.jpgDisplaying:dog.jpg

总结:

  1. 优点:职责清晰、高拓展性
  2. 缺点:代理模式可能会复杂化
  3. 和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。
  4. 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。
原创粉丝点击