代理模式这个名字就起的很合适,它所要做的就是“代理”这件事,可以分为静态代理和动态代理。
先说静态代理。
其实我觉得静态代理更像是在不改动原有基础类的原则上进行延伸更多的操作,就像继承那样,多了更多的方法,当然这是我初次的感觉,话不多说,用一个小例子来带入静态代理。
现在我来到上海,我想去租一间房,对,需求出现了,那么涉及租房的话就有一个人你必须要知道就是房东,但是很多房东不喜欢这其中的繁文缛节,于是怎么办呢?中介(代理)就来了,于是中介承担了中间一系列如带人看房、签合同等等的操作,顺便还赚了一波,而我作为租户我只需要和中介进行一系列的交流,房东什么的是连毛都没有见到。
接下来用程序来实现这个件事情。

//这是租房这件需求,一般是接口或者抽象类
public interface Rent {public void rent();
}
//这是房东,上面那个需求对准的就是她
public class Host implements Rent {public void rent() {System.out.println("我要租我的房子,但是其他的处理事务我不想干");}
}//中介来了
public class Proxy {private Host host;public Proxy(){}public Proxy(Host host){this.host=host;}public void rent(){host.rent();seeHouser();getHeTong();getMoney();}public void seeHouser(){System.out.println("中介带人看房");}public void getHeTong(){System.out.println("中介和租户签合同");}public void getMoney(){System.out.println("中介人要收中介费");}
}//最后就是刚来上海的我和这个一脸善笑、个性开朗的兄弟一阵沟通
public class ZuHu {public static void main(String[] args) {Host host=new Host();Proxy proxy=new Proxy(host);proxy.rent();}}

以上就是代理模式的实现,也就是说个体类更专注于自己所作的事,而公共的事务不需要操心交给代理类,但随之也会有麻烦,一个个体类就需要一个代理类与之环环相扣,如此代码量会增加。
但感觉这样好像并没有什么用,有个例子。
我们正常开发的时候在service会有service层的方法,我们假设抽象为增删改查。

public interface UserService {public void add();public void delete();public void update();public void query();
}
public class UserServiceImpl implements UserService {@Overridepublic void add() {System.out.println("add方法");}@Overridepublic void delete() {System.out.println("delete方法");}@Overridepublic void update() {System.out.println("update方法");}@Overridepublic void query() {System.out.println("query方法");}
}

现在出问题了,Boss要求在每个类中增加一个日志方法,于是怎么办呢?一个一个的打开去增加,先不说这困难与否(有很多实现类的情况下),=但是一般情况下我们是不应该在原有的类上进行改动的,你刚到一个公司就接到这个任务你开始着手在上面改动,结果任务没整好原有代码改崩了怎么办?所以这个时候代理模式是比较好的。
于是乎就可以出现下面的代码。

public class UserServiceImplProxy {private UserService userService;public void setUserService(UserService userService){this.userService=userService;}public void add(){log("add");userService.add();}public void delete(){log("delete");userService.delete();}public void update(){log("upadte");userService.update();}public void query(){log("query");userService.query();}public void log(String message){System.out.println("使用了"+message+"方法");}
}

aop学习前奏之代理模式之静态代理相关推荐

  1. 【Java】代理模式(静态代理动态代理)

    CONTENT 代理模式 静态代理 动态代理 JDK 动态代理(基于接口) CGLIB 动态代理(基于类继承) JDK 动态代理 v.s. CGLIB 动态代理 JDK 动态代理为什么必须基于接口 R ...

  2. 23种设计模式7_代理模式之一静态代理

    23种设计模式7_代理模式之一静态代理 1 基本介绍 代理模式:为其他对象提供一种代理以控制对这个对象的访问 代理模式也叫委托模式,它是一项基本设计技巧.许多其他的模式,如状态模式.策略模式.访问者模 ...

  3. 代理模式之---静态代理

    代理模式之-静态代理 代理模式:为一个对象提供一个替身,以控制对这个对象的访问.即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 被代 ...

  4. 【学习笔记】结合代码理解设计模式 —— 代理模式(静态代理、动态代理、延伸)

    文章目录 什么是代理模式 一. 代理模式简介 二. 静态代理模式 三. 动态代理模式 万能模版 前言:笔记基于狂神设计模式视频.<大话设计模式>观后而写 (最近一直在更新之前的刷题博客,今 ...

  5. Java的代理模式之静态代理和动态代理

    文章目录 静态代理 动态代理 jdk生成代理对象 cglib代理 代理模式简介: 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目 ...

  6. java代理模式之静态代理

    (一)静态代理 1.静态代码模式的介绍 静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类. 2.应用实例 具体要求: 1)定义一个接口:I ...

  7. 设计模式之代理模式(静态代理、Java动态代理、Cglib动态代理)

    代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问.这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介. 提醒:动态代理中涉及到以前的一些知识 ...

  8. 设计模式之代理模式(静态代理动态代理)

    目录 1.什么是代理模式 2.代理模式的结构 3.代理模式的实现 3.1 静态代理和动态代理概念 3.2 静态代理 3.3 动态搭理 3.3.1 代码实现 3.3.2 Proxy类讲解 4.动态代理V ...

  9. 设计模式之代理模式(上) 静态代理与JDK动态代理

    2019独角兽企业重金招聘Python工程师标准>>> 代理模式 给某一个对象提供一个代理,并由代理对象控制对原对象的引用. 静态代理 静态代理是由我们编写好的类,在程序运行之前就已 ...

最新文章

  1. 网易云游戏来了:手机电脑电视随时接入可玩,高流畅度低延迟,还能跨终端无缝切换...
  2. 休斯顿大学提出BCI-机器人(脑-外骨骼接口系统)可以改善运动恢复
  3. * 星号的居中 文本处理样式的总结
  4. UNIX再学习 -- 线程
  5. linq to entity常用操作
  6. (二)注册服务提供者
  7. python watchdog休眠_python watchdog
  8. ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address   already
  9. webots自学笔记(五)使用物理插件ODE建立铰链
  10. Windows内核驱动Hook入门
  11. JSON 在线编辑器
  12. ZJYYC LSH去年买了个表(也是LZY去年买了个表) DFS
  13. 面试时我们应该问面试官什么问题?
  14. 人生性格、爱情与酒场哲学
  15. iOS签名校验那些事儿
  16. 小写金额转为中文大写
  17. EXT.JS 学习笔记
  18. matlab直流电动机特性曲线,他励直流电动机的机械特性曲线的分析
  19. C#项目之 GMap.net 标记点及 绘制多点之间的距离
  20. udo/tcp协议占用端口列表(因5060被占用而采用的新端口)

热门文章

  1. 基于Java的图片字符画(含动图)
  2. 金庸群侠传资源压缩数据结构研究
  3. 10个现在最流行的网赚(变身富人)
  4. 我的Python心路历程 第十期 (10.2 通达信股票day数据转化为csv)
  5. 常用VIP邮箱有哪些功能?微信能接收邮件吗?
  6. mybatis SqlSessionFactory . openSession()方法执行过程
  7. 卡死 App 的神秘字符串,究竟是何方神圣(下)
  8. 检验文件路径是否存在,若不存在则创建
  9. 每日总结之kmphash 3.2 +归并排序模板
  10. 理想边界尺寸怎么算_一台以加油发电的新能源汽车 理想ONE - 新闻详情