java设计模式(8)--代理模式

最近学习spring-aop内容时,提到了代理模式,粗略了解了一下,发现代理模式实现的功能挺强大的,在很多地方都有用到,所以在此整理一下自己所了解的一些关于代理模式的一些知识。

一、概念(理解概念很重要,个人比较喜欢带着概念去理解代码。)
1.代理:生活中代理这个词很常见,没错我说的这个代理就是你现在头脑正在想的那个代理。
在生活中当我们客户不能直接或不想直接接触目标服务时,或者目标服务所提供的服务对客户有所不足时,我们就引入了代理。
example:火车站太远了,天太冷不想去,于是我们选择去了火车票代售点。这里的代售点也就成了代理,(但这里要注意的是这里虽然是票是代售点给的,但实际票还是来自火车站发放的。1代售点很近我们很快就能买到票,2但是却要收手续费5元,这两个情况也是代售点给我们带来的额外服务(虽然第二个我很不想要))
2.代理模式:代理模式给某一个对象提供一个代理对象,用来控制真实对象访问时的权限以及实现客户端与目标对象的沟通,还有添加额外目标对象所没有的的额外服务(如一些日志事物处理等)。
3.代理模式结构(四个角色)
● 抽象主题角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。

  ● 真实主题角色:定义了代理对象所代表的目标对象,真正实现业务逻辑的类

  ● 代理主题角色:代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象提供一个与目标对象相同的接口。代理对象通常在客户端调用传递给目标对象之前或之后,执行某个操作,而不是单纯地将调用传递给目标对象。它可以增加一些真实主题里面没有的功能。
  ● Main:客户端,使用代理类和主题接口完成一些工作。
代理模式可分为两大类:静态代理和动态代理
静态代理:对于指定类编写该类的代理类,在程序编译器该类.class文件就已经存在
类图结构如下:这里写图片描述

实例代码:

  • 抽象主题角色

package com.yc.Interface;
//订票,改签, 退票--》抽象主题角色
public interface RailwayStation {
        public void ByTicket();
        public void changeTicket();
        public void exitTicket();
}
  • 真实主题角色
package com.yc.Impl;

import com.yc.Interface.RailwayStation;
//实现类,具体的方法实现--》真实主题角色
public class RailwayStationImpl implements RailwayStation {
   

    @Override
    public void ByTicket() {
        System.out.println("成功购买一张票");
    }
    @Override
    public void changeTicket() {
        System.out.println("成功完成改签。。");
    }
    @Override
    public void exitTicket() {
        System.out.println("成功退票。。。");
    }
}
  • 代理主题角色
package com.yc.Impl;

import com.yc.Interface.RailwayStation;
//代理类,也实现抽象主题角色,和委托对象有着相同的接口--》代理主题角色
public 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值