竹笋

首页 » 问答 » 灌水 » 搞懂设计模式代理模式原理分析
TUhjnbcbe - 2023/6/20 18:42:00

引子

举个栗子,众所周知,我们是可以在京东上购买机票的。但机票是航司提供的,我们本质上是代理销售而已。

那为什么航司要让我们代理销售呢?

我们又是如帮他做代理的呢?

别急,本文将展开说说他们之间的关系。。。

一个有梦想的航司

从前有个航司打算开展线上销售机票业务,于是设计了如下系统。系统完成后,业务正常开展了。。。

航司销售机票的接口:

publicinterfaceSellAirTicket{/***销售机票*

paramprice*/voidsellAirTicket(intprice);}

航司销售机票的接口实现类:

publicclassSellAirTicketImplimplementsSellAirTicket{

OverridepublicvoidsellAirTicket(intprice){System.out.println("航司销售机票,价格:"+price);}}

测试:

publicclassMainClass{publicstaticvoidmain(String[]args){SellAirTicketsellAirTicket=newSellAirTicketImpl();sellAirTicket.sellAirTicket();}}

测试结果:

航司销售机票,价格:

业务蒸蒸日上,问题接踵而至

随着业务发展的越来越好,新的问题出现了。

*牛天天爬接口,系统风险出现了;卖完票没有统计结果,卖成啥样也不知道。

于是航司想增加售前风控、售后统计。加上这些功能后,业务又继续稳步发展了。。。

航司销售机票的接口:

publicinterfaceSellAirTicket{/***销售机票*

paramprice*/voidsellAirTicket(intprice);}

航司销售机票的接口实现类:

publicclassSellAirTicketImplimplementsSellAirTicket{

OverridepublicvoidsellAirTicket(intprice){System.out.println("航司售前风控。。。");System.out.println("航司销售机票,价格:"+price);System.out.println("航司售后统计。。。");}}

测试:

publicclassMainClass{publicstaticvoidmain(String[]args){SellAirTicketsellAirTicket=newSellAirTicketImpl();sellAirTicket.sellAirTicket();}}

测试结果:

航司售前风控。。。航司销售机票,价格:航司售后统计。。。

人员捉襟见肘,业务被迫拆分

后来航司发现,就这么点人,又想做风控,又想卖机票,又想做统计,根本忙不过来。

那怎么解决呢?航司只想专心卖票,不想做这些跟卖票无关的工作,那只能找个代理公司了。

于是,航司找到了JD代替自己做这些工作,自己就负责专心卖票。。。

航司销售机票的接口:

publicinterfaceSellAirTicket{/***销售机票*

paramprice*/voidsellAirTicket(intprice);}

航司销售机票的接口实现类:

publicclassSellAirTicketImplimplementsSellAirTicket{

OverridepublicvoidsellAirTicket(intprice){System.out.println("航司销售机票,价格:"+price);}}

JD平台代理航司销售机票实现类:

publicclassSellAirTicketProxyimplementsSellAirTicket{/***航司售票接口*/privateSellAirTicketsellAirTicket;

OverridepublicvoidsellAirTicket(intprice){System.out.println("JD售前风控。。。");sellAirTicket.sellAirTicket(price);System.out.println("JD售后统计。。。");}publicSellAirTicketProxy(SellAirTicketsellAirTicket){this.sellAirTicket=sellAirTicket;}}

测试:

publicclassMainClass{publicstaticvoidmain(String[]args){SellAirTicketsellAirTicket=newSellAirTicketImpl();SellAirTicketsellAirTicketProxy=newSellAirTicketProxy(sellAirTicket);sellAirTicketProxy.sellAirTicket();}}

测试结果:

JD售前风控。。。航司销售机票,价格:JD售后统计。。。

朴素的一对一合作方式,静态代理

以上流程对与航司而言,由JD帮助自己

1
查看完整版本: 搞懂设计模式代理模式原理分析