随着水果店的不断发展,又来的新的业务场景需求,海外购的代理工作。如图,和Peter合作的第三方公司可以从海外代购一些水果,发送到客户手中,而客户是不关心这个水果具体是从越南还是印尼过来的,顾客只管向Peter的水果店下订单即可。
这里Peter要做的就是转发这个订单请求到第三方公司去,而我们的Peter水果店就负责中转订单,它就是代理。具体类图:
这里我们有一个OutOrderServiceImpl是海外购买服务,我们的顾客是无法直接访问到这个服务的,我们的顾客只能直接访问到水果店,通过水果店的代理服务获取到海外的购买服务。
有一个OrderService服务接口,这个接口有两个服务类,本地服务OrderServiceImpl和海外服务OutOrderServiceImpl,顾客在下单时,是通过水果店的代理服务ProxyOrder进行海外购的,这个ProxyOrder服务类中组合进了海外购的服务对象,因此顾客通过proxy的代理方案得到了海外购的服务。
订单接口OrderService:
/**
* 订单接口
*/
public interface OrderService {
int saveOrder();
}
本地和海外两种服务实现类:
/**
* 本地订单
*/
public class OrderServiceImpl implements OrderService {
@Override
public int saveOrder() {
System.out.println("下单成功,订单号: 888888");
return 888888;
}
}
/**
* 海外订单
*/
public class OutOrderServiceImpl implements OrderService {
@Override
public int saveOrder() {
System.out.println("下单成功,订单号: 66666666");
return 66666666;
}
}
海外服务代理:
public class ProxyOrder implements OrderService {
//真实的订单服务
private OrderService orderService = new OutOrderServiceImpl();
@Override
public int saveOrder() {
System.out.println("开始海外下订单");
return orderService.saveOrder();
}
}
测试类:
/**
* 代理模式
* 代售进口水果
*/
public class ProxyClient {
public static void main(String[] args) {
saveOrder();
}
private static void saveOrder() {
//本地代理类
OrderService orderService = new ProxyOrder();
orderService.saveOrder();
//其它业务代码。。。。
}
}
测试结果: