• 代理设计模式(Proxy Pattern)

    • 为其他对象提供一种代理以控制对这个对象的访问,属于结构型模式
    • 客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象
  • 角色

    • Subject:对象接口,真实对象和代理对象都要实现的一个抽象接口
    • Proxy:包含了对真实对象的引用,从而可以随意的操作真实对象的方法
    • RealProject:真实对象
  • 代码示例:以卖手机为例子

    /**
     * 抽取公共的方法
     */
    interface DigitalSell {
        void sell();
    }
    
    /**
     * 真实对象
     */
    class DigitalSellReal implements DigitalSell {
        @Override
        public void sell() {
            System.out.println("销售小米手机");
        }
    }
    
    /**
     * 代理对象,增加了功能
     */
    class DigitalSellProxy implements DigitalSell {
    
        private DigitalSell realObj = new DigitalSellReal();
    
        @Override
        public void sell() {
            System.out.println("增强功能A");
            realObj.sell();
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            new DigitalSellProxy().sell();
        }
    }
    
  • 优点

    • 可以在访问一个类时做一些控制, 或增加功能
    • 操作代理类无需修改原本的源代码,符合开闭原则,系统具有较好的灵活性和可扩展性
  • 缺点

    • 增加系统复杂度和调用链路
  • 有静态代理和动态代理两种

    • 动态代理也有多种方式,cglib、jdk
  • 和装饰器模式的区别

    • 代理模式主要是两个功能
      • 保护目标对象
      • 增强目标对象,和装饰模式类似
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐