zoukankan      html  css  js  c++  java
  • 设计模式(十八)——代理模式

    1.描述

    为其他对象提供一种代理以控制对这个对象的访问。

    2.模式的使用

    ·抽象主题(Subject):抽象主题是一个接口,该接口是对象和他的代理所共用的接口,即是RealSubjectProxy实例所实现的接口。

    ·实际主题(RealSubject):实际主题是实现抽象主题接口的类。实际主题的实例是代理角色(Proxy)实例所代理的对象。

    ·代理(Proxy):代理是实现抽象主题接口的类(代理和实际主题实现了相同的接口)。代理含有主题接口声明的变量,该变量用来存放RealSubject的实例引用,这样,代理的实例就可以控制对他所包含的RealSubject的实例访问,即可以控制对他所代理的对象的访问。

    3.使用情景

    ·程序不希望用户直接访问该对象,而是提供一个特殊的对象以控制当前对象的访问。

    ·如果一个对象(例如很大的图像)需要很长时间才能加载完。

    ·如果对象位于远程主机,需要为用户提供访问该远程对象的能力。

    4.优点

    ·代理模式可以屏蔽用户真正请求的对象,使用户程序和真正的对象之间解耦。

    ·使用代理来担当那些创建耗时的对象的替身。

    5.UML

    没有

    6案例

     1 package 代理模式;
     2 
     3 public class test1 {
     4 
     5     public static void main(String[] args) {
     6         // TODO Auto-generated method stub
     7 
     8     }
     9 
    10 }
    11 
    12 /*
    13  * 抽象主题
    14  */
    15 interface Geometry{
    16     public double getArea();
    17 }
    18 
    19 /*
    20  * 具体模板
    21  */
    22 class Triangle implements Geometry{
    23     double sideA, sideB, sideC;
    24     Triangle(double sideA, double sideB, double sideC){
    25         this.sideA = sideA;
    26         this.sideB = sideB;
    27         this.sideC = sideC;
    28     }
    29     public double getArea() {
    30         double p = (sideA + sideB+ sideC)/2;
    31         return Math.sqrt(p * (p - sideA) * (p - sideB) * (p - sideC));
    32     }
    33     
    34 }
    35 
    36 /*
    37  * 代理
    38  */
    39 class TriangleProxy implements Geometry{
    40     double sideA, sideB, sideC;
    41     Triangle triangle;
    42     public void setSides(double sideA, double sideB, double sideC){
    43         this.sideA = sideA;
    44         this.sideB = sideB;
    45         this.sideC = sideC;
    46     }
    47     public double getArea() {
    48         if(sideA + sideB  > sideC && sideA +sideC > sideB){
    49             triangle = new Triangle(sideA, sideB, sideC);  //让所代理的对象调用getArea()方法
    50             return triangle.getArea();
    51         }
    52         else
    53             return -1;
    54     }
    55     
    56 }

    有空补充自动代理

  • 相关阅读:
    私有数据
    三大框架的对比
    angular的优化
    teamview centos 配置
    各种语言HMAC SHA256实现
    HttpClient使用cookie
    Mysql 安装
    iOS Safari 中点击事件失效的解决办法
    java验证码Captcha
    js 表单验证
  • 原文地址:https://www.cnblogs.com/cxy2016/p/7670518.html
Copyright © 2011-2022 走看看