当前位置: 首页 > news >正文

69期-Java SE-025-动态代理

 

Apple.java

package com.southwind.dymicproxy;

public class Apple implements Phone {

    @Override
    public String salePhone() {
        // TODO Auto-generated method stub
        return "销售iPhone手机";
    }

}

 

Benz.java

package com.southwind.dymicproxy;

public class Benz implements Car {

    @Override
    public String saleCar() {
        // TODO Auto-generated method stub
        return "销售奔驰汽车";
    }

}

 

BMW.java

package com.southwind.dymicproxy;

public class BMW implements Car {

    @Override
    public String saleCar() {
        // TODO Auto-generated method stub
        return "销售宝马汽车";
    }

}

 

Car.java

package com.southwind.dymicproxy;

public interface Car {
    public String saleCar();
}

 

House.java

package com.southwind.dymicproxy;

public interface House {
    public String saleHouse();
}

 

HuaWei.java

package com.southwind.dymicproxy;

public class HuaWei implements Phone {

    @Override
    public String salePhone() {
        // TODO Auto-generated method stub
        return "销售华为手机";
    }

}

 

MyInvocationHandler.java

package com.southwind.dymicproxy;

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

public class MyInvocationHandler implements InvocationHandler {
    private Object obj;
    
    //返回代理对象
    public Object bind(Object obj) {
        this.obj = obj;
        return Proxy.newProxyInstance(MyInvocationHandler.class.getClassLoader(), this.obj.getClass().getInterfaces(), this);  
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // TODO Auto-generated method stub
        System.out.println("日志。。。");
        return method.invoke(this.obj, args);
    }

}

 

Num.java

package com.southwind.dymicproxy;

public class Num implements House {

    @Override
    public String saleHouse() {
        // TODO Auto-generated method stub
        return "卖别墅";
    }

}

 

Phone.java

package com.southwind.dymicproxy;

public interface Phone {
    public String salePhone();
}

 

Test.java

package com.southwind.dymicproxy;

public class Test {
    public static void main(String[] args) {
        Phone phone = new Apple();
        //获取代理对象
        MyInvocationHandler myInvocationHandler = new MyInvocationHandler();
        Phone proxy = (Phone)myInvocationHandler.bind(phone);
        System.out.println(proxy.salePhone());
        Car car = new BMW();
        Car carProxy = (Car)myInvocationHandler.bind(car);
        System.out.println(carProxy.saleCar());
        House house = new Num();
        House houseProxy = (House)myInvocationHandler.bind(house);
        System.out.println(houseProxy.saleHouse());
    }
}

Cal.java

package com.southwind.proxy;

public interface Cal {
    public int add(int num1,int num2);
    public int sub(int num1,int num2);
    public int mul(int num1,int num2);
    public int div(int num1,int num2);
}

 

CalImpl.java

package com.southwind.proxy;

public class CalImpl implements Cal {
    
    @Override
    public int add(int num1, int num2) {
        // TODO Auto-generated method stub
        int result = num1+num2;
        return result;
    }
    
    @Override
    public int sub(int num1, int num2) {
        // TODO Auto-generated method stub
        int result = num1-num2;
        return result;
    }

    @Override
    public int mul(int num1, int num2) {
        // TODO Auto-generated method stub
        int result = num1*num2;
        return result;
    }

    @Override
    public int div(int num1, int num2) {
        // TODO Auto-generated method stub
        int result = num1/num2;
        return result;
    }

}

 

MyInvocationHandler.java

package com.southwind.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;

public class MyInvocationHandler implements InvocationHandler {
    //委托对象
    private Object object;
    
    //返回代理对象
    public Object bind(Object object) {
        this.object = object;
        return Proxy.newProxyInstance(MyInvocationHandler.class.getClassLoader(), this.object.getClass().getInterfaces(), this); 
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // TODO Auto-generated method stub
        System.out.println(method.getName()+"方法的参数是:"+Arrays.toString(args));
        Object result = method.invoke(this.object, args);
        System.out.println(method.getName()+"方法的执行结果是:"+result);
        return result;
    }

}

 

Test.java

package com.southwind.proxy;

public class Test {
    public static void main(String[] args) {
        Cal cal = new CalImpl();
        //获取动态代理对象
        MyInvocationHandler myInvocationHandler = new MyInvocationHandler();
        Cal proxy = (Cal) myInvocationHandler.bind(cal);
        System.out.println(proxy.add(10, 1));
        System.out.println(proxy.sub(20, 2));
        System.out.println(proxy.mul(30, 3));
        System.out.println(proxy.div(40, 4));
    }
}

Apple.java

package com.southwind.staticproxy;

public class Apple implements Phone {

    @Override
    public String salePhone() {
        // TODO Auto-generated method stub
        return "销售iPhone手机";
    }

}

 

Benz.java

package com.southwind.staticproxy;

public class Benz implements Car {

    @Override
    public String saleCar() {
        // TODO Auto-generated method stub
        return "销售奔驰汽车";
    }

}

 

BMW.java

package com.southwind.staticproxy;

public class BMW implements Car {

    @Override
    public String saleCar() {
        // TODO Auto-generated method stub
        return "销售宝马汽车";
    }

}

 

Car.java

package com.southwind.staticproxy;

public interface Car {
    public String saleCar();
}

 

CarProxy.java

package com.southwind.staticproxy;

public class CarProxy implements Car {
    
    private Car car;
    
    public CarProxy(Car car) {
        this.car = car;
    }

    @Override
    public String saleCar() {
        // TODO Auto-generated method stub
        System.out.println("汽车日志。。。");
        return this.car.saleCar();
    }

}

 

House.java

package com.southwind.staticproxy;

public interface House {
    public String saleHouse();
}

 

Huawei.java

package com.southwind.staticproxy;

public class HuaWei implements Phone {

    @Override
    public String salePhone() {
        // TODO Auto-generated method stub
        return "销售华为手机";
    }

}

 

Phone.java

package com.southwind.staticproxy;

public interface Phone {
    public String salePhone();
}

 

PhoneProxy.java

package com.southwind.staticproxy;

public class PhoneProxy implements Phone {
    
    private Phone phone;
    
    public PhoneProxy(Phone phone) {
        this.phone = phone;
    }

    @Override
    public String salePhone() {
        // TODO Auto-generated method stub
        System.out.println("日志。。。");
        return this.phone.salePhone();
    }

}

 

Proxy.java

package com.southwind.staticproxy;

public class Proxy implements Car,Phone,House{
    
    private Object obj;
    
    public Proxy(Object obj) {
        this.obj = obj;
    }

    @Override
    public String saleCar() {
        // TODO Auto-generated method stub
        System.out.println("汽车日志。。。");
        if(obj instanceof Car) {
            Car car = (Car) obj;
            return car.saleCar();
        }else {
            System.out.println("数据类型错误");
            return null;
        }
    }

    @Override
    public String salePhone() {
        // TODO Auto-generated method stub
        System.out.println("手机日志。。。");
        if(obj instanceof Phone) {
            Phone phone = (Phone) obj;
            return phone.salePhone();
        }else {
            System.out.println("数据类型错误");
            return null;
        }
    }

    @Override
    public String saleHouse() {
        // TODO Auto-generated method stub
        return null;
    }

}

 

Test.java

package com.southwind.staticproxy;

public class Test {
    public static void main(String[] args) {
        Phone phone1 = new Apple();
        
        Phone phone2 = new HuaWei();
        PhoneProxy phoneProxy = new PhoneProxy(phone1);
        System.out.println(phoneProxy.salePhone());
    }
}

 

Test2.java

package com.southwind.staticproxy;

public class Test2 {
    public static void main(String[] args) {
        Car car = new BMW();
        CarProxy carProxy = new CarProxy(car);
        System.out.println(carProxy.saleCar());
    }
}

 

Test3.java

package com.southwind.staticproxy;

public class Test3 {
    public static void main(String[] args) {
        Phone phone = new Apple();
        Proxy proxy = new Proxy(phone);
        System.out.println(proxy.salePhone());
        Car car = new Benz();
        proxy = new Proxy(car);
        System.out.println(proxy.saleCar());
    }
}

 

转载于:https://www.cnblogs.com/HiJackykun/p/11173369.html

相关文章:

  • JavaScript数值处理 + 小花样
  • SQLMap使用总结
  • Redis 学习笔记(篇五):对象(RedisObject)
  • Codevs 3981 动态最大子段和
  • A 小石的签到题
  • 又是问题~~~
  • Sql: 請假跨月份問題,或跨年份問題 日期部分边界
  • OpenFlow通信流程解读
  • React 入门与实战-课时7 虚拟DOM的本质和目的
  • sort函数和next_permutation()函数的用法。
  • 舵机控制原理
  • BZOJ1123 BLO
  • Mac下的PHP的配置与运行
  • 数据映射工具 AssionMapper
  • Navicat 连接MySQL 8.0.11 出现2059错误
  • [case10]使用RSQL实现端到端的动态查询
  • JavaScript服务器推送技术之 WebSocket
  • Javascript设计模式学习之Observer(观察者)模式
  • Laravel 菜鸟晋级之路
  • Linux下的乱码问题
  • Map集合、散列表、红黑树介绍
  • Material Design
  • php中curl和soap方式请求服务超时问题
  • Python_OOP
  • sublime配置文件
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 微信开放平台全网发布【失败】的几点排查方法
  • 移动端解决方案学习记录
  • 赢得Docker挑战最佳实践
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # 数论-逆元
  • (4)Elastix图像配准:3D图像
  • (HAL库版)freeRTOS移植STMF103
  • (简单) HDU 2612 Find a way,BFS。
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • *** 2003
  • .Family_物联网
  • .gitignore文件---让git自动忽略指定文件
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .Net FrameWork总结
  • .NET 材料检测系统崩溃分析
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .sdf和.msp文件读取
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例