日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java学习(178):终篇?静态代理?动态代理?

發(fā)布時(shí)間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java学习(178):终篇?静态代理?动态代理? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

總體設(shè)計(jì)

包c(diǎn)om.xzit.aop

?


  • Dynlnvoke
  • ProducerProxy

包c(diǎn)om.xzit.db


  • db

包c(diǎn)om.xzit.entity


  • Client
  • Department
  • Employee
  • Goods
  • Producer

包c(diǎn)om.xzit.interfaces


  • DepartmentDaoImp
  • EmployeeDaoImp
  • IGoods
  • IObject

包c(diǎn)om.xzit.proxy


  • TeatDynProxy
  • TestStaticProxy

咱直接上代碼,附一張圖,如果看到這里,我希望你看完,我是歌謠,期待一起共同進(jìn)步

工具: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; // 被代理的對(duì)象/*** 重寫(xiě)實(shí)現(xiàn)動(dòng)態(tài)代理的invoke方法*/public Object invoke(Object arg0, Method arg1, Object[] arg2)throws Throwable {System.out.println("動(dòng)態(tài)代理方法");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; // 被代理對(duì)象private Client client;// 購(gòu)買對(duì)象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:db

db類

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","事業(yè)部"));DEPLIST.add(new Department("dep200","策劃部"));DEPLIST.add(new Department("dep300","市場(chǎng)部"));DEPLIST.add(new Department("dep400","人事部"));DEPLIST.add(new Department("dep500","研發(fā)部"));DEPLIST.add(new Department("dep600","測(cè)試部"));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","聯(lián)想筆記本T450",8900.50));GOODSLIST.add(new Goods("goods400","小米麥克風(fēng)",99.50));} }

package:entity

Client類

package com.xzit.entity;/*** 客戶實(shí)體類* @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; /*** 部門信息實(shí)體類* @author Administrator**/ public class Department {private String number;// 部門編號(hào)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; /*** 員工實(shí)體類* @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;}/*** 無(wú)參構(gòu)造器*/public Employee() {}/*** 有參構(gòu)造器* @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; /*** 商品實(shí)體類* @author Administrator**/ public class Goods {private String number;// 商品編號(hào)private String name;// 商品名稱private Double price; // 商品單價(jià)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; /*** 生產(chǎn)商* @author Administrator**/ public class Producer implements IGoods {public List<Goods> produerGoodsList() {return DataBase.GOODSLIST;}}

package:interfaces

DepartmentDaoImp類

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;}}

IGoods

package com.xzit.interfaces;import java.util.List;import com.xzit.entity.Goods;/*** 提供產(chǎn)品列表的接口* 代理實(shí)現(xiàn)者和被代理對(duì)象都應(yīng)該實(shí)現(xiàn)此接口* @author Administrator**/ public interface IGoods {/*** 提供產(chǎn)品的方法* @return*/List<Goods> produerGoodsList(); }

IObject

package com.xzit.interfaces;import java.util.List;public interface IObject<T> {/*** 查找目標(biāo)數(shù)據(jù)列表* @return*/List<T> findList(); }

package:proxy

TeatDynProxy

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 {/*** 動(dòng)態(tài)代理測(cè)試* @param args*/public static void main(String[] args) {DynInvoke dynInovke = new DynInvoke();// 創(chuàng)建動(dòng)態(tài)代理對(duì)象DepartmentDaoImp<Department> depDao = new DepartmentDaoImp<Department>();// 創(chuàng)建被代理的目標(biāo)對(duì)象EmployeeDaoImp<Employee> empDao = new EmployeeDaoImp<Employee>();//dynInovke.setTarget(depDao);// 設(shè)置被代理對(duì)象dynInovke.setTarget(empDao);// 設(shè)置被代理對(duì)象Class [] classes = depDao.getClass().getInterfaces();// 獲取所有被代理對(duì)象的父接口數(shù)組IObject iObject = (IObject)Proxy.newProxyInstance(empDao.getClass().getClassLoader(), classes,dynInovke);// 獲取代理類實(shí)例List<Employee> depList = iObject.findList();// 調(diào)用目標(biāo)方法for(Employee dep:depList){System.out.println(dep.getName());}}}

TestStaticProxy

package 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();// 代理實(shí)現(xiàn)者proxy.setProducer(new Producer());System.out.println("輸入客戶姓名");String name = in.next();System.out.println("您是VIP請(qǐng)輸入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();// 調(diào)用代理實(shí)現(xiàn)方法for(Goods g:goodsList){System.out.println(g.getName()+"\t"+g.getNumber()+"\t"+g.getPrice());}}}

運(yùn)行結(jié)果

動(dòng)態(tài)代理方法

動(dòng)態(tài)代理方法 獲取員工列表 任我行 任盈盈 令狐沖 岳不群 丁春秋

靜態(tài)代理方法

輸入客戶姓名 歌謠 您是VIP請(qǐng)輸入1,否則輸入 0 1 加熱器 goods100 104.975 勝利羽毛球lark4 goods200 45.9 聯(lián)想筆記本T450 goods300 7565.425 小米麥克風(fēng) goods400 84.575

本人來(lái)博客已經(jīng)兩月有余,期待與大家共同進(jìn)步。分享技術(shù),分享快樂(lè)。我是歌謠,感謝關(guān)注。

如果你看到這篇文章,請(qǐng)留下你的鼓勵(lì),謝謝。

總結(jié)

以上是生活随笔為你收集整理的java学习(178):终篇?静态代理?动态代理?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。