关闭

Java静态代理

标签: javaJava SE二十三种设置模式静态代理动态代理
49人阅读 评论(0) 收藏 举报
分类:

.

代理模式:就是为目标对象提供一种代理已达到控制对象真实对象访问的目的
  

在一些情况下,一些客户不能直接或不想直接访问目标对象,而代理对象则起到在这两者之间的的"中介人"作用.


=========================================================================================

角色描述:

①代理类和目标类共同的接口

②目标类

③代理类

④测试类(非必须)


=========================================================================================案例分析:

1.共同接口

package com.gyoomi.e_staticproxy;
/**
 * 
 * @ClassName: Subject
 * @Description: 代理类和抽象类的共同的接口
 * @author gyoomi
 * @date 2017年9月18日
 *
 */
public interface Subject {
	public void eat();
}
2.目标类

package com.gyoomi.e_staticproxy;

/**
 * 
 * @ClassName: RealSubject
 * @Description: 目标类
 * @author gyoomi
 * @date 2017年9月18日
 *
 */
public class RealSubject implements Subject {

	@Override
	public void eat() {
		System.out.println("real subject eat somethings");
	}
}
3.代理类
package com.gyoomi.e_staticproxy;
/**
 * 
 * @ClassName: ProxySubject
 * @Description: 代理类(静态代理--->编译前就已存在)
 * @author gyoomi
 * @date 2017年9月18日
 *
 */
public class ProxySubject implements Subject{
	//代理类内部包含对真实类的引用
	private RealSubject  realSubject = new RealSubject();
	
	@Override
	public void eat() {
		//真实目标类之前做一些其他操作
		this.preEat();
		
		//真实目标类要完成的事情
		realSubject.eat();
		
		//真实目标类之后做一些其他操作
		this.postEat();
	}
	
	//前方法
	private void preEat() {
		System.out.println("before eating...");
	}
	//后方法
	private void postEat() {
		System.out.println("after eating...");
	}

}

===================================================================================================================================

4:测试类(非必须):

package com.gyoomi.e_staticproxy;
/**
 * 
 * @ClassName: Client
 * @Description:客户端测试类
 * @author gyoomi
 * @date 2017年9月18日
 *
 */
public class Client {
	public static void main(String[] args) {
		Subject proxy = new ProxySubject();
		proxy.eat();
	}
}
结论:
按照上述的方式(静态代理)使用代理模式,那么真实角色必须是实现已经存在的,并将其作为代理对象的内部属性。

但是实际使用时,一个真实角色必须对应一个代理角色,但如果大量使用会导致类的急剧膨胀;此外,如果事先并不知道真实角色,该如何使用代理呢?接下来就是JDK的动态 代理!!!



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

java静态代理与动态代理的区别

java静态代理和动态代理 本文动态代理部分内容大量引自:http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/  一、代理概念 ...
  • u014381710
  • u014381710
  • 2015-10-25 22:15
  • 2073

JAVA学习篇--静态代理VS动态代理

本篇博客的由来,之前我们学习大话设计,就了解了代理模式,但为什么还要说呢?原因:1,通过DRP这个项目,了解到了动态代理,认识到我们之前一直使用的都是静态代理,那么动态代理又有什么好处呢?它们二者的区...
  • hejingyuan6
  • hejingyuan6
  • 2014-07-01 20:36
  • 37444

java静态代理和动态代理

一、代理概念 为某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类...
  • u011776918
  • u011776918
  • 2013-12-08 12:41
  • 8563

Java 静态代理

  • 2012-08-29 12:39
  • 48KB
  • 下载

Java 静态代理模式

  • 2017-07-02 19:40
  • 2KB
  • 下载

java反射和静态代理模式

1 要想使用反射,首先要有一个所需要的类的Class对象,有三种方式获得Class对象:   1.对象.getClass()方法 2.类名.class 3.Class.forName("java...
  • qq_33551684
  • qq_33551684
  • 2016-03-05 22:59
  • 124

java设计模式之代理模式 (静态&动态)

为其他对象提供一个代理控制对某个对象的访问,代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。 代理类和委托类要实现相同的接口,因为代理真正实现的还是委托类的方...
  • WannerWang
  • WannerWang
  • 2016-03-15 20:16
  • 218

Java代理模式(静态模式&动态模式简介)

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 意图:为其他对象提供一种代理...
  • glrh123
  • glrh123
  • 2016-07-15 18:17
  • 141

java设计模式---静态代理(简单笔记)

Java动态代理模式 代理:一个角色代表别一个角色来完成某些特定的功能。    比如:生产商,中间商,客户这三者这间的关系             ...
  • liubin8095
  • liubin8095
  • 2013-05-08 09:12
  • 745

JAVA静态代理

代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。 为了保持行为的一致性,代理...
  • wangxm245
  • wangxm245
  • 2012-07-18 09:43
  • 426
    个人资料
    • 访问:2275次
    • 积分:376
    • 等级:
    • 排名:千里之外
    • 原创:33篇
    • 转载:8篇
    • 译文:0篇
    • 评论:0条
    文章分类