栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式之九:代理模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式之九:代理模式

在访问一个对象时进行控制

A通过代理类去访问B,而不是A直接访问B
代理类则是A访问B的中间层(访问层)


事例

需求:水果订单有本地仓库订单和第三方仓库订单两种,且第三方订单需要作访问控制

数据结构如图

接口及其实现类:

public interface OrderService {
    void order();
}
// 本地仓库订单
public class OrderServiceImpl implements OrderService {
    @Override
    public void order() {
        System.out.println("OrderServiceImpl order");
    }
}
// 第三方仓库订单
public class OutOrderServiceImpl implements OrderService {
    @Override
    public void order() {
        System.out.println("OutOrderServiceImpl order");
    }
}

代理类要持有被代理类的对象,这样最终才能访问到被代理类
代理类要继承被代理类的抽象OrderService,这样才能代替被代理类
代理类:

public class ProxyOrder implements OrderService {
    private OrderService mService;

    public ProxyOrder() {
        mService = new OutOrderServiceImpl();
    }

    @Override
    public void order() {
        System.out.println("ProxyOrder order");
        // 可以添加访问控制的代码
        mService.order();
        // 可以添加访问控制的代码
    }
}

测试:

    public void proxy() {
    	// 通过代理类增加了访问控制,最终再调到第三方仓库的订单
        OrderService service = new ProxyOrder();
        service.order();
    }

总结 适用场景

当要对一个类的访问加以控制时。如调用某个方法时要加上准备工作和收尾工作等

优点
  • 扩展性强
  • 低耦合。访问控制不需要加在客户端或服务端
缺点
  • 可能会导致请求的处理变慢
  • 代理类过多会增加系统复杂度,很多代理类可能业务相同(如打印时间日志)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/269980.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号