结构型设计模式之--代理模式

随着水果店的不断发展,又来的新的业务场景需求,海外购的代理工作。如图,和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();

        //其它业务代码。。。。
    }
}

测试结果:

装饰器和代理模式区别:

猜你喜欢

转载自blog.csdn.net/cpcpcp123/article/details/107299395