java之静态代理
© 版权声明:本文为博主原创文章,转载请注明出处
定义:
- 为其他对象提供一种代理以控制对这个对象的访问
组成:
抽象角色:通过接口或抽象类声明真正角色实现的业务方法
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用
代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作
优势:
- 1. 业务类只需要关注业务逻辑本身,保证了业务类的重用性
劣势:
- 1. 一个代理类只能代理一个接口,当需要代理的接口很多时就会创建很多的代理类,使得项目规模变大并且维护困难
- 2. 如果接口变了,那么实现类和代理类都需要相应的进行改动
实例:
1.项目结构

2.pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.proxy</groupId> <artifactId>StaticProxy</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project>
3.Hello.java
package org.proxy.StaticProxy;
/**
 * 接口-抽象角色
 *
 */
public interface Hello {
	void say(String name);
	
}
4.HelloImpl.java
package org.proxy.StaticProxy;
/**
 * 实现类-真实角色
 *
 */
public class HelloImpl implements Hello {
	public void say(String name) {
		System.out.println("Hello!" + name);
		
	}
}
5.HelloProxy.java
package org.proxy.StaticProxy;
/**
 * 代理角色
 *
 */
public class HelloProxy implements Hello {
	private Hello hello;
	
	public HelloProxy() {
		
		hello = new HelloImpl();
		
	}
	public void say(String name) {
		
		before();
		hello.say(name);
		after();
	}
	
	private void before() {
		
		System.out.println("Before");
		
	}
	private void after() {
		
		System.out.println("After");
		
	}
	
}
6.TestStaticProxy.java
package org.proxy.test;
import org.junit.Test;
import org.proxy.StaticProxy.Hello;
import org.proxy.StaticProxy.HelloProxy;
public class TestStaticProxy {
   
	@Test
	public void TestHello() {
		Hello helloProxy = new HelloProxy();
		helloProxy.say("Jack");
		
	}
	
}
7.效果预览

参考:《架构探险-从零开始写Java Web框架》(黄勇著)
	© 版权声明:本文为博主原创文章,转载请注明出处
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号