`

静态代理模式

    博客分类:
  • java
阅读更多
静态代理模式的角色:
抽象角色:声明真实角色和代理角色的接口;
真实角色: 最终要引用的对象
代理角色:持有一个真实角色的引用

一个房东(真实角色),一个中介(代理角色),都能实现卖房子这个动作(接口中的抽象方法)。
但只有房东有房子,它一定能卖房子,但中介必须与房东交互才能卖掉房子(必须持有真实角色的引用)。

1.抽象角色:Subject.java
package proxy;

public abstract class Subject
{
	public abstract void request();
}


2.真实角色:RealSubject.java
package proxy;

public class RealSubject extends Subject
{
	public void request()
	{
		System.out.println("From real subject.");
	}
}


3.代理角色:ProxySubject.java
package proxy;

public class ProxySubject extends Subject
{
	//代理角色内部引用了真实角色
	private RealSubject realSubject = new RealSubject(); 
	
	public void request()
	{
		//在真实角色操作之前所附加的操作
		this.preRequest(); 
		
		//真实角色所完成的事情
		realSubject.request(); 

		//在真实角色操作之后所附加的操作
		this.postRequest(); 
	}
	
	private void preRequest()
	{
		System.out.println("pre request");
	}
	
	private void postRequest()
	{
		System.out.println("post request");
	}
}


4.客户端:Client.java
package proxy;

public class Client
{
	public static void main(String[] args)
	{
		Subject subject = new ProxySubject();
		
		subject.request();
	}
}



静态代理虽然也能实现一个代理真实多个真实角色,但每增加一个真实现角色就必须实现真实角色的接口,并添加对应的方法,角色一多就混乱了。

在实际应用中,通常是一个真实角色对应一个代理角色。此外,如果事先并不知道真实角色,该如何使用代理呢?这个问题可以通过Java的动态代理类实现。
分享到:
评论

相关推荐

    优秀的设计模式示例-静态代理模式

    在这个例子中,"优秀的设计模式示例-静态代理模式"提供了实际项目中的代码实例,旨在帮助开发者更好地理解和应用静态代理模式。 静态代理模式的核心思想是通过代理类来代理原始对象(也称为真实对象或服务对象),...

    Java 静态代理模式

    Java静态代理模式是一种设计模式,它允许我们为一个对象提供一个代理,以便增强或扩展其功能,同时不改变原有对象的代码。在Java中,静态代理是通过在代理类中显式实现目标接口来实现的。下面将详细介绍静态代理模式...

    设计模式(八)之静态代理模式.zip

    静态代理模式是设计模式中的一种,它属于结构型模式,主要用来在不修改原有对象的基础上,通过一个代理对象来增强或扩展原对象的功能。在本篇文章中,我们将深入探讨静态代理模式的概念、工作原理以及其优缺点。 ##...

    java 设计模式之代理模式(Proxy Pattern)实现代码及设计详解:动态代理模式、静态代理模式

    下面是一个简单的静态代理模式示例: ```java public interface Service { void doSomething(); } public class RealService implements Service { @Override public void doSomething() { // 实现具体业务...

    JavaSE065静态代理模式深度剖析.docx

    在Java编程中,静态代理模式是一种设计模式,它允许我们在不修改原始对象代码的情况下,通过创建一个代理类来扩展或增强对象的功能。静态代理模式在Java SE中有着广泛的应用,特别是在需要控制对某个对象访问或者...

    Spring学习笔记(12)----静态代理模式分析演示

    在本篇Spring学习笔记中,我们将探讨静态代理模式在Spring框架中的应用与分析。静态代理是一种常见的设计模式,它在不修改目标类代码的情况下,通过代理类来扩展或增强目标类的功能。在Spring中,静态代理主要应用于...

    java静态代理、动态代理、装饰设计模式

    在Java编程中,代理模式是一种常见的设计模式,它允许我们为一个对象提供一个代理以控制对这个对象的访问。代理模式通常用于增加额外的功能或在访问原对象时进行额外的操作,比如日志记录、安全控制、性能统计等。...

    java 设计模式 静态代理模式

    //代理模式内部引用了真实角色 public void requst() { this.preRequest(); //在真实角色操作之前所附加的操作 if(null == realsubject) { realsubject = new ReallSubject(); } realsubject.requst(); // ...

    代理模式_静态代理.zip

    设计模式之代理模式_静态代理的一个java实现的demo。主类在Client中。仅代码实现,可供初学者参考使用

    spring+静态代理

    在本主题"spring+静态代理"中,我们将深入探讨如何利用Spring框架来实现静态代理模式,并通过接口回调的方式来增强代码的灵活性和可扩展性。 静态代理是一种设计模式,它允许我们在不修改原始对象(被代理对象)的...

    包含静态代理和动态代理demo代码

    以下是一个简单的静态代理模式的步骤: 1. 定义一个接口,如`Service`,其中声明了需要被代理的方法。 2. 创建真实类(Target)实现`Service`接口,实现具体业务逻辑。 3. 创建代理类(Proxy)同样实现`Service`...

    Spring模拟aop静态代理案例

    总结起来,这个案例旨在通过Spring AOP的静态代理模式,帮助开发者掌握如何在不改变原有业务逻辑的情况下,插入额外的行为,从而提升代码的灵活性和可扩展性。同时,理解和实践这个案例,也能加深对面向切面编程的...

    JAVA静态代理和动态代理

    以下是一个简单的静态代理模式示例: 1. 定义接口: ```java public interface Service { void doSomething(); } ``` 2. 实现目标对象: ```java public class RealService implements Service { @Override ...

    Java代理模式模板代码,包含动态代理与静态代理

    以下是一个简单的静态代理模式模板代码示例: ```java // 目标接口 public interface Target { void doSomething(); } // 目标类 public class RealTarget implements Target { @Override public void ...

    静态代理案例---线程买票

    在这个静态代理案例中,静态代理模式主要用于增加额外的功能,例如日志记录、权限验证等,而不会影响到核心业务逻辑(购票)。代理类将持有目标对象(售票员),并在调用目标对象方法时进行预处理和后处理。 总的来...

    PHP大牛线上培训班课-静态代理请求对象静态代理.zip

    6. **优缺点分析**:分析了静态代理模式的优点,如解耦、扩展性,以及可能的缺点,如代码量增加、可能导致类结构复杂化等。 7. **实例演示**:通过多个视频教程(如“容器中”、“静态代理_1”、“_2”等),详细...

    JAVA设计模式之代理模式实例

    以下是一个简单的静态代理模式示例: ```java // 目标接口 interface Target { void doSomething(); } // 目标实现类 class RealTarget implements Target { @Override public void doSomething() { System....

    Java设计模式——代理设计模式(静态代理和动态代理)

    在Java编程中,设计模式是一种解决常见问题的模板或最佳实践,它可以帮助开发者编写更加灵活、可维护和可扩展的代码。代理设计模式是其中的一种,它的主要作用是在...在实际开发中,应根据项目需求选择合适的代理模式。

    设计模式之_代理模式

    以下是一个简单的静态代理模式示例: 1. **接口SelfInterface**:定义了代理和真实对象共同实现的方法,例如: ```java public interface SelfInterface { void doSomething(); } ``` 2. **真实对象RedWine**:...

    代理模式详解

    以数据库连接管理为例,展示如何使用静态代理模式: 1. **接口定义**:首先定义一个`Connection`接口,其中包含基本的数据库操作方法,例如`createStatement()`和`close()`等。 ```java public interface ...

Global site tag (gtag.js) - Google Analytics