05、人人都会设计模式:代理模式--Proxy( 四 )


简直有木有
3、自动售票机
随着科技的发达,我们现在买车票的时候可以在自动售票机「代理售票人员」上购买
自动售票机简单的 UML
根据 UML 撸码--采用动态代理技术
/*** Created by TigerChain* 定义一个抽象接口*/public interface ISellTicket {// 售票void sellTicket() ;}
/*** Created by TigerChain* 买票的人*/public class User {private String uname ; //姓名private String address ; // 地址private String sex ;// 性别private String idNum ;// 身份证号private String pay ;// 掏票钱public String getUname() {return name;;}public void setUname(String uname) {this.uname = name;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getIdNum() {return idNum;}public void setIdNum(String idNum) {this.idNum = idNum;}public String getPay() {return pay;}public void setPay(String pay) {this.pay = pay;}}
/*** Created 真实的售票员小张*/public class XiaoZhangSeller implements ISellTicket {private User user ;public XiaoZhangSeller(User user){this.user = user ;}@Overridepublic void sellTicket() {if(null !=user){System.out.println("买票者的信息===============");System.out.println("买票者姓名:"+user.getUname());System.out.println("买票性别:"+user.getSex());System.out.println("买票者身份证号:"+user.getIdNum());System.out.println("买票者住址:"+user.getUname());System.out.println("==============================") ;System.out.println("正在验证信息...信息无误,请支付票钱");System.out.println("买票者支付:"+user.getPay()+" 元");System.out.println("请稍等正在出票.....");System.out.println("出票成功:从西安到宝鸡大巴进站去坐");}}}
/*** Created by TigerChain* 自动出票机,为了演示名字这样想,其实这是一个万能的动态代理*/public class DyAutoSellerProxy implements InvocationHandler {private Object object ;public DyAutoSellerProxy(Object object){this.object = object ;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {return method.invoke(object,args) ;}}
/*** Created by TigerChain* 测试类*/public class Test {public staticvoid main(String args[]){// 定义个买票者User tigerChain = new User() ;tigerChain.setUname("TigerChain");tigerChain.setAddress("中国陕西");tigerChain.setSex("男");tigerChain.setIdNum("610326************");tigerChain.setPay("45.00");// 真实的买票员小张ISellTicket iSellTicket = new XiaoZhangSeller(tigerChain) ;// 动态代理DyAutoSellerProxy dyAutoSellerProxy = new DyAutoSellerProxy(iSellTicket) ;// 动态创建一个出票机,把出票交给出票机去处理ISellTicket iSellTicket1 = (ISellTicket) Proxy.newProxyInstance(iSellTicket.getClass().getClassLoader(),iSellTicket.getClass().getInterfaces(),dyAutoSellerProxy);iSellTicket1.sellTicket();}}
自么样一个自动售票机就完成了「完全代理了人工去卖票」
PS:这个 Demo 使用动态代理实现的,请大家自行使用静态代理实现本 Demo,一定要动手实践哦
4、AIDL 进行进程间通讯「远程代理」
AIDL「 接口定义语言,是一种语言,其实就是中的远程 」,再说 AIDL 之前就不得不说 「这里简洁明了的说一下是什么,不展开深入讨论,如果深入展开,三天三夜也说不完」
什么是
由于两个进程不能直接进行通讯「为了安全系统有进程隔离机制」,所以两个进程之间是不能直接进行通讯的 。可以说是系统中最重要的架构之一 。是连接 「进程」 和 「进程」 的一个桥梁, 是进程间通信的方式之一,在用的灰常灰常的多