当前位置:首页 > CN2资讯 > 正文内容

java静态代理,动态代理(java学习笔记)(一)java动态代理

8小时前CN2资讯


静态代理

package com.gds.demo.test;

public interface Animal {
public void action();
public void breach();
}package com.gds.demo.test;

public class Cat implements Animal{
@Override
public void action() {
System.out.println("喵喵喵。。。。。");
}

@Override
public void breach() {
System.out.println("喵式呼吸大法。。。。");
}
}package com.gds.demo.test;

public class CatProxy implements Animal{

Cat cat;

public CatProxy(Cat cat){
this.cat = cat;
}
@Override
public void action() {

System.out.println("===========catproxy代理执行开始");
cat.action();
System.out.println("===========catproxy代理执行结束");
}

@Override
public void breach() {

System.out.println("===========catproxy代理执行开始");
cat.breach();
System.out.println("===========catproxy代理执行结束");
}
}package com.gds.demo.test;

public class Dog implements Animal{
@Override
public void action() {
System.out.println("汪汪汪-------------");
}

@Override
public void breach() {
System.out.println("狗刨式----------");
}
}package com.gds.demo.test;

public class DogProxy implements Animal{

Dog dog;
public DogProxy(Dog dog){
this.dog = dog;
}

@Override
public void action() {
System.out.println("Dogproxy 代理执行开始----------");
dog.action();
System.out.println("Dogproxy 代理执行结束----------");
}

@Override
public void breach() {
System.out.println("Dogproxy 代理执行开始----------");
dog.breach();
System.out.println("Dogproxy 代理执行结束----------");
}
}package com.gds.demo.test;

public class TestStaticProxy {
public static void main(String[] args) {
Cat cat = new Cat();
CatProxy catProxy = new CatProxy(cat);
catProxy.action();
catProxy.breach();


Dog dog = new Dog();
DogProxy dogProxy = new DogProxy(dog);
dogProxy.action();
dogProxy.breach();
}
}

动态代理

package com.gds.demo.test1;

/**
* 杏仁面包代理
*/
public class ApricotBreadProxy implements BreadMachine{
private BreadMachine breadMachine;

public ApricotBreadProxy(BreadMachine breadMachine){
this.breadMachine = breadMachine;
}
@Override
public void makeBread() {
breadMachine.makeBread();
System.out.println("adding aprioct......");
}
}package com.gds.demo.test1;

import javax.sound.midi.Soundbank;

/**
* 杏仁蛋糕代理
*/
public class ApricotCakeProxy implements CakeMachine{
private CakeMachine cakeMachine;

public ApricotCakeProxy(CakeMachine cakeMachine){

this.cakeMachine = cakeMachine;
}
@Override
public void makeCake() {

cakeMachine.makeCake();
System.out.println("adding aprioct.....");
}

}package com.gds.demo.test1;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
* 杏仁动态代理
*/
public class ApricotHandler implements InvocationHandler {

private Object object;

public ApricotHandler(Object object){
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object invoke = method.invoke(object, args);
System.out.println("adding apricot.....");

return invoke;
}
}package com.gds.demo.test1;

/**
* 面包机器接口
*/
public interface BreadMachine {
void makeBread();
}package com.gds.demo.test1;

/**
* 蛋糕机器接口
*/

public interface CakeMachine {
void makeCake();
}package com.gds.demo.test1;

import java.lang.reflect.Proxy;

/**
* 蛋糕店
*/
public class CakeShop {
public static void main(String[] args) {
new FruitCakeMachine().makeCake();
new ChocolateCakeMachine().makeCake();
new RedBeanBreadMachine().makeBread();
new CurrantBreadMachine().makeBread();

FruitCakeMachine fruitCakeMachine = new FruitCakeMachine();

ApricotCakeProxy apricotCakeProxy = new ApricotCakeProxy(fruitCakeMachine);
apricotCakeProxy.makeCake();
apricotCakeProxy = new ApricotCakeProxy(new ChocolateCakeMachine());
apricotCakeProxy.makeCake();

RedBeanBreadMachine redBeanBreadMachine = new RedBeanBreadMachine();

ApricotBreadProxy apricotBreadProxy = new ApricotBreadProxy(redBeanBreadMachine);
apricotBreadProxy.makeBread();
CurrantBreadMachine currantBreadMachine = new CurrantBreadMachine();
apricotBreadProxy = new ApricotBreadProxy(currantBreadMachine);
apricotBreadProxy.makeBread();


// 动态代理 给蛋糕加杏仁
ApricotHandler apricotHandler = new ApricotHandler(fruitCakeMachine);
CakeMachine cakeMachine= (CakeMachine) Proxy.newProxyInstance(fruitCakeMachine.getClass().getClassLoader(),
fruitCakeMachine.getClass().getInterfaces(),apricotHandler);
cakeMachine.makeCake();


// 给面包加杏仁
apricotHandler = new ApricotHandler(redBeanBreadMachine);
BreadMachine breadMachine = (BreadMachine) Proxy.newProxyInstance(redBeanBreadMachine.getClass().getClassLoader(),
redBeanBreadMachine.getClass().getInterfaces(), apricotHandler);
breadMachine.makeBread();
}
}package com.gds.demo.test1;

/**
* 巧克力蛋糕机器
*/
public class ChocolateCakeMachine implements CakeMachine{
@Override
public void makeCake() {
System.out.println("making a ChocolateCake cake...........");
}
}package com.gds.demo.test1;

/**
* 葡萄干面包机器
*/
public class CurrantBreadMachine implements BreadMachine{
@Override
public void makeBread() {
System.out.println("making currant bread.........");
}
}package com.gds.demo.test1;

/**
* 水果蛋糕机器
*/
public class FruitCakeMachine implements CakeMachine{
@Override
public void makeCake() {
System.out.println("Making a fruit cake.....");
System.out.println("adding aprioct...........");
}
}package com.gds.demo.test1;

/**
* 红豆面包机器
*/
public class RedBeanBreadMachine implements BreadMachine{
@Override
public void makeBread() {
System.out.println("making red bean bread...........");
}
}

 

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24485.html

    分享给朋友:

    “java静态代理,动态代理(java学习笔记)(一)java动态代理” 的相关文章

    Vorboss:伦敦领先的商业光纤网络提供商,互联网速度与稳定性之选

    Vorboss概述 在现代商业环境中,服务的速度和稳定性比以往任何时候都重要。Vorboss的出现,为伦敦的企业带来了一个崭新的光纤网络选择。作为伦敦唯一专用的商业光纤网络,Vorboss提供至少10Gbps的互联网速度,并且支持扩展到100Gbps。这种高效的网络解决方案为雄心勃勃的公司提供了直接...

    Debian 修改DNS 设置的详细指南及常见问题解决方法

    了解DNS及其重要性 在日常使用网络的过程中,我们常会遇到“DNS”这个术语。简单来说,DNS(Domain Name System)是互联网的“电话簿”。它将我们输入的域名转换为计算机理解的IP地址,确保我们能够顺利访问网站。如果没有DNS,我们将不得不记住每一个网站的IP地址,那可真是太麻烦了!...

    如何安全地关闭防火墙和使用Linux命令管理防火墙

    在使用Linux系统时,关闭防火墙这件事我总觉得是个敏感话题。防火墙是保护计算机免受外部攻击的重要屏障,理解其作用很有必要。防火墙可以帮助我们监控和限制进入或离开系统的网络流量,让未授权的访问无处遁形。因此,在我们决定关闭防火墙之前,首先要明确什么样的场景和条件下,这个操作是合理的。 关闭防火墙之前...

    了解尼日利亚IP地址及其获取方法

    尼日利亚IP地址概述 尼日利亚的IP地址数量颇具规模,达到3,196,160个,这在全球范围内占有0.0938%的比重,位居第61位。这意味着,尽管尼日利亚在全球互联网上不是最大的参与者,但它的IP资源依然相对丰富,给予了很多用户连接世界的机会。听起来兴奋吧?这些IP地址为本地互联网用户和企业提供了...

    莱卡云:高性价比云服务器解决方案,助力企业发展

    莱卡云概述 莱卡云,这个名字你或许已经听说过。成立于2019年,它在云计算服务领域迅速崭露头角,成为一些企业的首选合作伙伴。凭借持有的多个《中华人民共和国增值电信业务经营许可证》,莱卡云有效地展开了多种多样的服务,充分满足了市场需求。与三大公有云的合作让它在竞争激烈的市场中站稳了脚跟,提供的解决方案...

    OVH 黑五促销活动详解:服务器折扣与购买指南

    OVH 黑五活动概述 在每年感恩节后的第一天,黑色星期五(Black Friday)成了一年中最大的购物盛事之一。它起源于美国,最初是零售商为了清理库存而设立的特价销售日。随着时间的推移,黑五的影响力逐渐扩展至全球,成为各种行业都参与的一次购物狂欢。对于消费者而言,这不仅是一次购物机会,更是寻找到心...