ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

代理模式(静态代理)

2020-07-02 19:36:45  阅读:218  来源: 互联网

标签:静态 Object 代理 模式 对象 Rent 中介 public


目录

代理模式(静态)

定义:

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。一般我们写代码的时候, 对已经存在的代码尽量不要在修改了, 因为可能好多地方都调用这个方法, 改掉之后可能会出问题, 但是我们可以使用代理对象调用之前的方法进行内容扩充.

意图:

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

主要解决:

在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。

应用实例:

  1. Windows 里面的快捷方式。

  2. 猪八戒去找高翠兰结果是孙悟空变的,可以这样理解:把高翠兰的外貌抽象出来,高翠兰本人和孙悟空都实现了这个接口,猪八戒访问高翠兰的时候看不出来这个是孙悟空,所以说孙悟空是高翠兰代理类。

  3. 买火车票不一定在火车站买,也可以去代售点。

  4. 一张支票或银行存单是账户中资金的代理。支票在市场交易中用来代替现金,并提供对签发人账号上资金的控制。

  5. spring aop。

代码案例:

例如租房: 客户租房可以找中介, 中介帮你找房东出租房子, 这里的中介起到的就是代理作用

1.出租房子

com.test.Rent

// 出租房子
public interface Rent {
    // 给了钱返回房子
    Object rent(Object money);
}

2.业主(要出租房屋的人

com.test.Host

// 业主, 出租房子
public class Host implements Rent {
    @Override
    public Object rent(Object money) {
        System.out.println("业主(真实对象): 房屋出租成功...价钱" + money);
        return new Object(); // 假如Object就是出租的房子
    }
}

3.代理(中介公司)

你只需要找中介租房即可, 不需要直接找业主

com.test.Proxy

// 代理, 中介公司
public class Proxy implements Rent {

    // 提供真实对象, 被代理的对象
    private Rent host = new Host();

    @Override
    public Object rent(Object money) {
        // 1. 约时间
        time();
        // 2. 看房子
        seeHouse();
        // 3. 讲价钱, 签协议
        killPrice();
        // 调用业主的方法进行出租
        Object house = host.rent(money);
        // 4. 后期维护
        weihu();
        return null;
    }
    public void time() {
        System.out.println("约时间");
    }
    public void seeHouse() {
        System.out.println("看房子");
    }
    public void killPrice() {
        System.out.println("讲价钱, 签协议");
    }
    public void weihu() {
        System.out.println("后期维护");
    }
}

4.客户租房子

com.test.Customer

// 客户, 要租房子
public class Customer {
    public static void main(String[] args) {
        // 找中介
        Rent agent = new Proxy();
        // 租房
        agent.rent(3000);
    }
}

结果:

约时间
看房子
讲价钱, 签协议
业主(真实对象): 房屋出租成功...价钱3000
后期维护

优点

  1. 职责清晰。
  2. 高扩展性。
  3. 智能化。

缺点

  1. 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
  2. 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
  3. 静态代理的代码量比较大

总结

例如我们在调用service的时候, service层的一个现有存在的方法和现在的需求很相似, 但是我们不能对其更改, 因为在所有使用这个方法的地方都有可能出问题, 这时候我们就可以创建一个serviceProxy对象, 去实现之前service的接口, 在代理对象里面调用之前service的方法, 就可以不改变原有代码的情况下, 实现代码的复用

标签:静态,Object,代理,模式,对象,Rent,中介,public
来源: https://www.cnblogs.com/zpKang/p/13226579.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有