1. 设计一个案例来实现租房功能。分析:在租房的过程中涉及到了3个对象,房东,中介,房客。

中介和房客具有相同的功能--租房。

可以设计如下:

2.上图的设计实际上就是一个代理设计模式---静态代理设计模式。

代理设计模式有4个角色

抽象角色 : 是一个接口,使得真实角色和代理角色具有相同的功能。

真实角色: 实际存在某个功能或权限的角色。

代理角色:代理真实角色实现某种功能。代理角色可以附加另外一些功能。

客户端:使用代理角色。

3.使用代码实现

Rent.java

public interface Rent {//租房public void rent();
}

Host.java

public class Host implements Rent{@Overridepublic void rent() {System.out.println("========将房屋出租=======");}
}

Proxy.java

public class Proxy implements Rent{private Host host;public Proxy(Host host) {super();this.host = host;}@Overridepublic void rent() {fare();host.rent();maintance();}private void fare(){System.out.println("-----收取中介费---");}private void maintance(){System.out.println("-----房屋维护---");}public void setHost(Host host) {this.host = host;}
}

Client.java

public class Client {public static void main(String[] args) {Host host = new Host();Proxy proxy = new Proxy(host);proxy.rent();}
}

4.作用

真实角色代码在不增加的情况下,增加了新的功能。

5.应用案例

UserService.java

public interface UserService {public void add();public void delete();public void update();
}

UserServiceImpl.java

/*** 在service的方法中,经常会有一些公共的功能,* 如:事务,日志,权限,缓存等**/
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");}
}

UserServiceImplProxy.java

public class UserServiceImplProxy implements UserService{private UserService userService;@Overridepublic void add() {LogUtil.log();userService.add();}@Overridepublic void delete() {LogUtil.log();userService.delete();}@Overridepublic void update() {LogUtil.log();userService.update();}}

LogUtil.java

public class LogUtil {public static void log(){System.out.println("进入了方法");}
}

6.总结

通过以上代码可知,

优点:静态代理实现了公共业务和真实的业务逻辑的分离,降低了耦合,结构更清晰,维护更方便,扩展更容易,分工更明确。

缺点:代码的复杂程度增加,每个业务类都需要有一个相关的代理类,代码量增加-------解决办法:使用动态代理。

转载于:https://www.cnblogs.com/Vincent-yuan/p/11260911.html

java之 代理设计模式相关推荐

  1. java之代理设计模式

    代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代 ...

  2. 深度解析JAVA动态代理设计模式

    基本概念:Proxy模式也叫代理模式,所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理(比 ...

  3. final类是否可以被代理_浅谈Java【代理设计模式】——看这篇文章就懂了

    什么是代理模式 为其他对象提供一种代理以控制对这个对象的访问. 为什么使用代理模式 中介隔离:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的 ...

  4. 结构设计模式 - 代理设计模式

    结构设计模式 - 代理设计模式 代理设计模式是结构设计模式之一,在我看来是最简单的模式之一. 目录[ 隐藏 ] 1代理设计模式 1.1代理设计模式 - 主类 1.2代理设计模式 - 代理类 1.3代理 ...

  5. Java设计模式(十三):代理设计模式

    代理模式可以分为以下四类 远程代理(Remote Proxy):控制对远程对象(不同地址空间)的访问,它负责将请求及其参数进行编码,并向不同地址空间中的对象发送已经编码的请求. 虚拟代理(Virtua ...

  6. Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理

    面试问题:Java里的代理设计模式(Proxy Design Pattern)一共有几种实现方式?这个题目很像孔乙己问"茴香豆的茴字有哪几种写法?" 所谓代理模式,是指客户端(Cl ...

  7. java设计模式代理模式_Java中的代理设计模式

    java设计模式代理模式 代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它 ...

  8. Java中的代理设计模式

    代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它们. 代理设计模式是一种结 ...

  9. Java代理设计模式(Proxy)的具体实现:静态代理和动态代理

    Java代理设计模式(Proxy)的具体实现:静态代理和动态代理 实现方式一:静态代理 静态代理方式的优点 静态代理方式的缺点 Java动态代理实现方式一:InvocationHandler Java ...

最新文章

  1. ffmpeg的中文学习文档
  2. java中堆栈(stack)和堆(heap)
  3. 亿佰特物联网无线模块通信技术分析
  4. C++之继承探究(十一):多重继承、菱形继承、虚继承、二义性问题及其解决方案
  5. 命令行安装DHCP服务器
  6. 旅行商问题(TSP) 中国34个城市 经纬度平面坐标
  7. 砍价小程序怎么变成二维码(小程序码)
  8. 从零开始用阿里云服务器搭建网页
  9. 最全面的Kano模型详解,及Kano模型为何是5种需求?
  10. service中间调用dao层方法时,出现Mapper method ‘dao.xxx‘ has an unsupported return type错误,但是sql执行修改数据成功,并没有回滚
  11. 有道linux安装路径,Ubuntu 16.04下安装有道词典出错的解决方法
  12. scrapy爬取昵图网图片
  13. 设计一个形状类(接口)Shape,方法:求周长和求面积形状类(接口)的子类(实现类):
  14. matlab 自动生成陷波滤波器算法实现
  15. YOLOX升级 | 阿里巴巴提出YOLOX-PAI,1ms内精度无敌,超越YOLOv6、PP-YOLOE
  16. Python摄氏度与华氏度的相互转换
  17. JST :Joint sentiment topic model ASUM :Aspect sentiment unification model
  18. 《Deep Learning for Computer Vision withPython》阅读笔记-StarterBundle(第4 - 5章)
  19. Docker入门详细教程,全网最全!
  20. 今年春节琼州海峡天气乐观 海南多部门“未雾绸缪”

热门文章

  1. 创建交互式shell脚本对话框
  2. MDA:模型驱动架构 简介
  3. 如何在Postfix中设置邮件转发
  4. 一种基于FPGA 的1080p 高清多摄像头全景视频拼接的泊车(机)
  5. 解决Uncaught SyntaxError: Unexpected token var报错问题
  6. [转]Java加密算法
  7. Android用户界面开发(16):ImageSwitcher
  8. Centos6.3修改源码遇到无法yum安装的问题
  9. hibernate详解
  10. 【转蝈蝈俊.net 】SQL Server 2005 配置发送邮件