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

java178-终篇?静态代理?动态代理?java静态代理和动态代理

3天前CN2资讯

总体设计

包com.xzit.aop

Dynlnvoke
ProducerProxy
包com.xzit.db

db
包com.xzit.entity

Client
Department
Employee
Goods
Producer
包com.xzit.interfaces

DepartmentDaoImp
EmployeeDaoImp
IGoods
IObject
包com.xzit.proxy

TeatDynProxy
TestStaticProxy
咱直接上代码,附一张图,如果看到这里,我希望你看完,我是歌谣,期待一起共同进步

工具:IDEA

package:aop
Dynlnvoke类
package com.xzit.aop;

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

public class DynInvoke implements InvocationHandler {

private Object target; // 被代理的对象
/**
* 重写实现动态代理的invoke方法
*/
public Object invoke(Object arg0, Method arg1, Object[] arg2)
throws Throwable {

System.out.println("动态代理方法");
Object obj = arg1.invoke(target, arg2);
return obj;
}

public void setTarget(Object target) {
this.target = target;
}

}
ProducerProxy类package com.xzit.aop;

import java.util.List;

import com.xzit.entity.Client;
import com.xzit.entity.Goods;
import com.xzit.entity.Producer;
import com.xzit.interfaces.IGoods;

public class ProducerProxy implements IGoods {

private Producer producer; // 被代理对象
private Client client;// 购买对象

public List<Goods> produerGoodsList() {
boolean bool = validateIsVip();
if(bool){
List<Goods> goodsList = producer.produerGoodsList();
for(Goods g:goodsList){
g.setPrice(g.getPrice()*0.85);
}
return goodsList;
}
return producer.produerGoodsList();
}

public void setProducer(Producer producer) {
this.producer = producer;
}

public void setClient(Client client) {
this.client = client;
}

private boolean validateIsVip(){

if(client.isVip())
return true;
return false;
}

}
package:dbdb类
package com.xzit.db;

import java.util.ArrayList;
import java.util.List;

import com.xzit.entity.Department;
import com.xzit.entity.Employee;
import com.xzit.entity.Goods;

public class DataBase {

public static final List<Department> DEPLIST = new ArrayList<Department>();
public static final List<Employee> EMPLIST = new ArrayList<Employee>();
public static final List<Goods> GOODSLIST = new ArrayList<Goods>();

static{
DEPLIST.add(new Department("dep100","事业部"));
DEPLIST.add(new Department("dep200","策划部"));
DEPLIST.add(new Department("dep300","市场部"));
DEPLIST.add(new Department("dep400","人事部"));
DEPLIST.add(new Department("dep500","研发部"));
DEPLIST.add(new Department("dep600","测试部"));

EMPLIST.add(new Employee("任我行","男","黑木崖"));
EMPLIST.add(new Employee("任盈盈","女","黑木崖"));
EMPLIST.add(new Employee("令狐冲","男","华山"));
EMPLIST.add(new Employee("岳不群","男","华山"));
EMPLIST.add(new Employee("丁春秋","男","南海"));

GOODSLIST.add(new Goods("goods100","加热器",123.50));
GOODSLIST.add(new Goods("goods200","胜利羽毛球lark4",54.00));
GOODSLIST.add(new Goods("goods300","联想笔记本T450",8900.50));
GOODSLIST.add(new Goods("goods400","小米麦克风",99.50));


}
}
package:entityClient类
package com.xzit.entity;

/**
* 客户实体类
* @author Administrator
*
*/
public class Client {

private String name; // 客户姓名

private boolean isVip; // 是否是VIP客户

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public boolean isVip() {
return isVip;
}

public void setVip(boolean isVip) {
this.isVip = isVip;
}
}
Department类package com.xzit.entity;
/**
* 部门信息实体类
* @author Administrator
*
*/
public class Department {

private String number;// 部门编号

private String name;// 部门名称

public String getNumber() {
return number;
}

public void setNumber(String number) {
this.number = number;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Department() {

}

public Department(String number, String name) {
this.number = number;
this.name = name;
}
}
Emploee类package com.xzit.entity;
/**
* 员工实体类
* @author Administrator
*
*/
public class Employee {

private String name;
private String sex;
private String address;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}

/**
* 无参构造器
*/
public Employee() {

}

/**
* 有参构造器
* @param name
* @param sex
* @param address
*/
public Employee(String name, String sex, String address) {
this.name = name;
this.sex = sex;
this.address = address;
}
}
Goods类package com.xzit.entity;
/**
* 商品实体类
* @author Administrator
*
*/
public class Goods {

private String number;// 商品编号
private String name;// 商品名称
private Double price; // 商品单价

public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}

public Goods() {

}

public Goods(String number, String name, Double price) {
this.number = number;
this.name = name;
this.price = price;
}
}
Producer类package com.xzit.entity;

import java.util.List;

import com.xzit.db.db.DataBase;
import com.xzit.interfaces.IGoods;
/**
* 生产商
* @author Administrator
*
*/
public class Producer implements IGoods {

public List<Goods> produerGoodsList() {

return DataBase.GOODSLIST;
}

}
package:interfacesDepartmentDaoImp类
package com.xzit.interfaces;

import java.util.List;

import com.xzit.db.db.DataBase;

public class DepartmentDaoImp<T> implements IObject<T> {

public List<T> findList() {
System.out.println("获取部门列表");
return (List<T>) DataBase.DEPLIST;
}

}
EmployeeDaoImp类package com.xzit.interfaces;

import java.util.List;

import com.xzit.db.db.DataBase;

public class EmployeeDaoImp<T> implements IObject<T> {

public List<T> findList() {
System.out.println("获取员工列表");
return (List<T>) DataBase.EMPLIST;
}

}
IGoodspackage com.xzit.interfaces;

import java.util.List;

import com.xzit.entity.Goods;

/**
* 提供产品列表的接口
* 代理实现者和被代理对象都应该实现此接口
* @author Administrator
*
*/
public interface IGoods {

/**
* 提供产品的方法
* @return
*/
List<Goods> produerGoodsList();
}
IObjectpackage com.xzit.interfaces;

import java.util.List;

public interface IObject<T> {

/**
* 查找目标数据列表
* @return
*/
List<T> findList();
}
package:proxyTeatDynProxy
package com.xzit.proxy;

import java.lang.reflect.Proxy;
import java.util.List;

import com.xzit.aop.DynInvoke;
import com.xzit.entity.Department;
import com.xzit.entity.Employee;
import com.xzit.interfaces.DepartmentDaoImp;
import com.xzit.interfaces.EmployeeDaoImp;
import com.xzit.interfaces.IObject;

public class TestDynProxy {

/**
* 动态代理测试
* @param args
*/
public static void main(String[] args) {

DynInvoke dynInovke = new DynInvoke();// 创建动态代理对象
DepartmentDaoImp<Department> depDao = new DepartmentDaoImp<Department>();// 创建被代理的目标对象
EmployeeDaoImp<Employee> empDao = new EmployeeDaoImp<Employee>();
//dynInovke.setTarget(depDao);// 设置被代理对象
dynInovke.setTarget(empDao);// 设置被代理对象
Class [] classes = depDao.getClass().getInterfaces();// 获取所有被代理对象的父接口数组

IObject iObject = (IObject)Proxy.newProxyInstance(empDao.getClass().getClassLoader(), classes,dynInovke);// 获取代理类实例

List<Employee> depList = iObject.findList();// 调用目标方法

for(Employee dep:depList){

System.out.println(dep.getName());
}
}

}
TestStaticProxypackage com.xzit.proxy;

import java.util.List;
import java.util.Scanner;

import com.xzit.aop.ProducerProxy;
import com.xzit.entity.Client;
import com.xzit.entity.Goods;
import com.xzit.entity.Producer;

public class TestStaticProxy {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);
ProducerProxy proxy = new ProducerProxy();// 代理实现者
proxy.setProducer(new Producer());

System.out.println("输入客户姓名");
String name = in.next();
System.out.println("您是VIP请输入1,否则输入 0");
int isVip = in.nextInt();
boolean bool = isVip == 1?true:false;
Client c = new Client();
c.setName(name);
c.setVip(bool);

proxy.setClient(c);

List<Goods> goodsList = proxy.produerGoodsList();// 调用代理实现方法

for(Goods g:goodsList){

System.out.println(g.getName()+"\t"+g.getNumber()+"\t"+g.getPrice());
}

}

}


运行结果

动态代理方法

动态代理方法
获取员工列表
任我行
任盈盈
令狐冲
岳不群
丁春秋
静态代理方法

输入客户姓名
歌谣
您是VIP请输入1,否则输入 0
1
加热器    goods100    104.975
胜利羽毛球lark4    goods200    45.9
联想笔记本T450    goods300    7565.425
小米麦克风    goods400    84.575
本人来博客已经两月有余,期待与大家共同进步。分享技术,分享快乐。我是歌谣,感谢关注。



    你可能想看:

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

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

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

    分享给朋友:

    “java178-终篇?静态代理?动态代理?java静态代理和动态代理” 的相关文章

    Racknerd 圣何塞 VPS:高性能、低延迟的托管解决方案

    Racknerd 公司简介 Racknerd 是一家国际性的互联网托管服务提供商,成立于2019年。虽然相对年轻,但它在短时间内赢得了不少用户的信赖。公司提供多种托管解决方案,包括虚拟主机、分销主机服务、基于KVM虚拟化技术的VPS产品、独立服务器租赁以及数据中心托管服务。Racknerd 的全球业...

    不限制流量套餐:选择适合你的最佳电信方案

    在我们这个信息高速发展的时代,手机成为了我们日常生活中不可或缺的一部分。而随着视频、游戏和社交媒体等应用的流行,很多用户的流量需求逐渐增加。这也促使电信运营商们纷纷推出了“不限流量套餐”,以满足用户对流量的广泛需求。 简单来说,不限流量套餐意指用户可以在一个月内不限流量使用手机数据,虽然很多套餐背后...

    CN2中转:提高数据传输效率的最佳选择

    CN2中转概述 当我第一次接触CN2中转时,我就被它的高效和可靠性所吸引。CN2中转是一种通过中国电信的CN2线路进行数据传输的方式。这条线路不仅仅是简单的网络连接,它被誉为“二类全业务”数据专线,能够提供高速、低时延、低抖动和低丢包率的优质网络服务。帮助用户更好地访问境外数据,这一点让我感到它的重...

    OneTechCloud:高性价比VPS与独立服务器的最佳选择

    在了解OneTechCloud之前,我们先来探讨一下它的成立背景和发展历程。OneTechCloud,或称易科云,是一家自2019年就开始运营的国内小型主机商。虽然成立时间不久,但它迅速在市场上获得了一定的知名度。作为由中国团队经营的公司,OneTechCloud专注于提供海外VPS和独立服务器服务...

    搬瓦工DC9:高性价比VPS选择,稳定快速的服务器解决方案

    在这个快速发展的互联网时代,越来越多的人开始寻求高效、稳定的服务器解决方案。搬瓦工DC9正是为满足这种需求而推出的一款限量版VPS套餐。它不仅方便快捷,而且在性能和性价比上都表现出色,让用户在搭建网站、进行游戏或其他项目时更加省心。 搬瓦工DC9的全名是“The DC9 Plan”,每年仅需38美元...

    DirectAdmin安装全攻略:快速安装与配置指南

    DirectAdmin是一款由国外开发的虚拟主机管理系统。我第一次接触它时,就被其强大的功能和用户友好的界面所吸引。它不仅可以管理服务器,还能帮助我轻松设置EMAIL、DNS、FTP等。这种集中管理的方式大大提高了我的工作效率,尤其是对那些需要频繁处理服务器配置的用户来说,DirectAdmin无疑...