zoukankan      html  css  js  c++  java
  • java设计模式之代理模式

    一、代理模式简介
    在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,并执行现有对象的相关方法,以便向外界提供功能接口。一般代理模式主要解决直接访问对象不合适的情形。比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层,即使用代理模式。
    代理模式的应用实例: 
    1、Windows 里面的快捷方式。
    2、spring aop。
    3、远程代理、虚拟代理、防火墙代理等。


    二、实例演示
    1、业务分析
    加入我们需要从电脑磁盘中读取一个图片对象,因为图片对象相对较大,我们采用代理模式来操作图片。
    2、创建一个图片类的接口和实现了该接口的图片实体类
    Image.java
    public interface Image {
       void display();
    }


    RealImage.java
    public class RealImage implements Image {
    
    
       private String fileName;
    
    
       public RealImage(String fileName){//传入图片名称
          this.fileName = fileName;
          loadFromDisk(fileName);
       }
    
    
       @Override
       public void display() {
          System.out.println("Displaying " + fileName);
       }
    
    
       private void loadFromDisk(String fileName){
          System.out.println("Loading " + fileName);
       }
    }




    3、建立一个代理类ProxyImage,以此来减少 RealImage 对象加载的内存占用。
    ProxyImage.java

    public class ProxyImage implements Image{//代理类也实现了图片接口
    
    
       private RealImage realImage;//持有一个图片实体类的引用
       private String fileName;
    
    
       public ProxyImage(String fileName){
          this.fileName = fileName;
       }
    
    
       @Override
       public void display() {//这里实际是realImage这个实例在操作
          if(realImage == null){
             realImage = new RealImage(fileName);
          }
          realImage.display();
       }
    }




    4、测试
    ProxyDemo.java

    public class ProxyDemo {
    	
       public static void main(String[] args) {
          Image image = new ProxyImage("test.jpg");//调用代理类的初始化方法
    
    
          //图像将从磁盘加载
          image.display(); 
       }
    }


    三、总结
    代理模式主要使用了java的多态,表面上来看是代理类(ProxyImage)进行的相关操作,但在代理类的内部,正真执行操作的是被代理类(RealImage)。能完成这个的前提是:代理类和被代理类实现了同一个接口,代理类“知道”被代理类中的属性和方法,所以可以进行代理操作。
    代理模式和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 
    代理模式和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。


  • 相关阅读:
    java知识点--重写与重载
    java基础知识分析: final , finally,finalize
    jdbc对 数据库的数据进行增删改(两个类)
    数据库的创建,字段的增加删除,创建表单,过滤(个人笔记)不详细
    sql数据库在登录异常时 ora-03114:未连接到ORACLE怎么办
    用table类型布局一个新闻网页
    c/s用户与服务器之间的传输
    javascript输入用户名,在服务器中显示出了
    三级联动省市区
    本周总结
  • 原文地址:https://www.cnblogs.com/kangsir/p/6653225.html
Copyright © 2011-2022 走看看