• 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框架》(黄勇著)

  • 相关阅读:
    中科院大牛博士是如何进行文献检索和阅读(好习惯受益终生)(转载)
    大家平常都喜欢看哪些人的博客,共享…… ZZ (水木)
    heart ultrasound from american society of echocardiography
    用TWaver实现组合的Chart
    Hello TWaver Android
    关注细节-TWaver Android
    TWaver Java内存占用测试
    TWaver Android 概述
    机器学习中的相似性度量
    最大熵模型(一)
  • 原文地址:https://www.cnblogs.com/jinjiyese153/p/6930242.html
Copyright © 2020-2023  润新知