静态代理设计模式

代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。

为什么需要代理:   

  打一个最简单的比方,我现在想要学习,那么就必须得把书包拿过来,把书掏出来,准备好纸笔,然后开始学习,等学完了我还得收拾书,把书塞回书包里,还得整理一下书包,这是一个完整的学习的过程,但是我很懒,不想动弹,只想学习,那可能就得让妈妈帮我把书包拿过来,把书打开,我只管学习就好了,学完以后,妈妈再帮我把书整理好放回去.(我这是打个什么破比方...),在这里,妈妈就代表了一个代理对象,要学习的人是我,而我只管学习,这样效率才最高,至于其他的交给代理对象(妈妈)做就好了,画一个丑陋的的图表示一下:

静态代理

我们最开始接触jdbc操作数据库的时候,业务层每一个方法,都需要1.打开数据库连接,2.执行我们想要的操作3.关闭数据库连接.这样就使得业务层代码不够纯粹,我的功能是查询用户数据,打开和关闭数据库连接关我毛事?我干嘛要去干这件事?这就是传统开发中存在的一个问题

其实这个方法的实现是有问题的,核心业务与辅助业务写在了一个方法中,不但业务冗余了不说,像开关数据库连接这样的公共操作也大量的重复,这时候就出现了代理模式的思想,我们可以使用代理模式的思想改写一下上面的代码:

实现类的改造:

通过代理模式,我们可以抽取出核心业务与辅助业务,但是问题随之而来了,我这里编写的UserServiceProxy是挺不错,可是它只能服务与UserService这个接口的对象啊,如果我有一千个业务,那岂不是要编写一千个代理类,其实这种代理模式就是静态代理,它的缺点很明显,静态代理只能服务于一种类型的对象,不利于业务的扩展,那么动态代理就诞生出来。

本文转载:https://www.cnblogs.com/fingerboy/p/5335328.html

原文地址:https://www.cnblogs.com/xianshiwang/p/10242011.html

时间: 2024-10-07 06:32:57

静态代理设计模式的相关文章

静态代理设计模式(StaticProxy)

静态代理设计模式: 要求:真实角色,代理角色:真实角色和代理角色要实现同一个接口,代理角色要持有真实角色的引用. 在Java中线程的设计就使用了静态代理设计模式,其中自定义线程类实现Runable接口,Thread类也实现了Runalbe接口,在创建子线程的时候,传入了自定义线程类的引用,再通过调用start()方法,调用自定义线程对象的run()方法.实现了线程的并发执行. 1 public class Test2 { 2 3 public static void main(String[]

28 多线程(二)——静态代理设计模式

引入 在前一节我们学习了实现Runnable接口创建线程,其中提到只使用一次对象时使用匿名对象,如: new Thread(new xxx().start();//xxx为实现了Runnable的类 Thread就是一个静态代理,使用了这种方法,xxx类无需继承Thread类,就可以通过Thread类创建一个线程. Thread就和装饰类的作用相似,都是包装一个对象. 那么,静态代理设计模式的特点就是: 代理者与被代理者都继承同一个接口(Thread与xxx继承的是Runnable接口) 代理者

装饰者设计模式与静态代理设计模式的对比

相同点: (1) 装饰者类与代理类都需要实现目标类所实现的接口 (2) 装饰者类与代理类中都需要声明目标类对象,目的是这些类中都需要调用目标对象的目标方法 (3) 装饰者类与代理类都可以在不改变目标类的前提下对目标对象进行增强 不同点: (1) 目的不同:装饰者类的目的就是为了增强目标类:静态代理类的目的是为了保护和隐藏目标对象. (2) 装饰者类与代理类中都需要声明目标类对象,但对于目标对象的创建方式不同.装饰者类是由带参构造器传入的:代理类中的目标对象,是在无参构造器中直接创建的. (3) 

【设计模式学习笔记】 之 静态代理

简介:静态代理设计模式可以理解为实际操作对象的代理,这个代理拥有实际对象的所有接口,代理对象中持有着实际对象的引用,但是这个代理对象在客户端调用接口的时候,将这些请求进行拦截,对请求数据进行预处理(相当于Filter),可以在预处理中做判断如果满足条件放行实际对象操作,否则代理对象处理并返回. 有几点需要注意: 访问代理对象的客户端并不知道这是一个代理对象,他只关心效果 代理对象可以对调用传参进行处理 特定的情况下代理对象可以代实际对象执行操作 初学亿图画个图,看样子还行,大家凑合看看:) 由于

设计模式之静态代理模式

举个栗子: 比如你结婚,婚庆公司帮你代理一些事情(布置婚房,准备午餐等),虽然婚前公司做的,但是是为你而做的 静态代理的设计模式的三要素: 1.真实角色 2.代理角色:代理角色需要具有真实角色的引用,这样才能实现对真实角色的代理 3.真实角色和代理角色要实现共同的接口 看个样例: Staticproxy.java package 设计模式; /** * @author:yb * @version 创建时间:2018-12-24 下午4:48:03 类说明 */ /* * 静态代理 设计模式 *

java之 代理设计模式

1. 设计一个案例来实现租房功能.分析:在租房的过程中涉及到了3个对象,房东,中介,房客. 中介和房客具有相同的功能--租房. 可以设计如下: 2.上图的设计实际上就是一个代理设计模式---静态代理设计模式. 代理设计模式有4个角色 抽象角色 : 是一个接口,使得真实角色和代理角色具有相同的功能. 真实角色: 实际存在某个功能或权限的角色. 代理角色:代理真实角色实现某种功能.代理角色可以附加另外一些功能. 客户端:使用代理角色. 3.使用代码实现 Rent.java public interf

设计模式(一) 静态代理

1.1.简单理解代理模式 代理(Proxy)是一种设计模式, 提供了对目标对象另外的访问方式:即通过代理访问目标对象. 这样好处: 可以在目标对象实现的基础上,增强额外的功能操作,扩展目标对象的功能.列如:我们有的时候打官司,我们需要请律师,因为律师在法律方面有专长,可以替我们进行打赢官司的操作,表达我们的想法.在这个列子中,我们就是目标对象,而律师就是代理对象,帮助我们完成我们所想的事情.当然打赢官司与打不赢这就是另外一回事了. 代理模式的关键点: 代理对象 与 目标对象. 1.2.静态代理

用过滤器和装饰者设计模式(静态代理)解决getParameter乱码问题

post的乱码问题比较好解决,这里主要是对get请求的乱码做处理 解决思路:增强request对象的getParameter方法,使之 getParameter  直接获取到的就是解决乱码后的数据 有四种方式, 1.继承 :(下下策) ①明确知道全类名 可以打印request实现类,可以知道实现类的全类名 ②就是可以在子类中 new 父类 你能确定request实现类,一定可以new么? 确定自己写出的是通用方法.tomcat,weblogic,jboss...... 缺点: ①很难实现,几乎没

Java设计模式-代理模式之静态代理

Java设计模式-代理模式之静态代理 概念 为另一个对象提供一个替身或占位符以提供对这个对象的访问,使用代理模式创建代表对象,让代表对象控制某对象的访问,被代理对象可以是远程的对象.创建开销大的对象或需要安全控制的对象 远程代理控制访问远程对象 虚拟代理控制访问创建开销大的资源 保护代理基于权限控制对资源的访问 看如下的类图: 仔细看上面的类图,首先是Subject它为RealSubject和Proxy提供了接口,通过实现同一个接口,Proxy在RealSubject出现的地方取代它,这点和适配