【每天一个java设计模式(七)】 - 代理模式

x33g5p2x  于2021-12-21 转载在 Java  
字(1.2k)|赞(0)|评价(0)|浏览(420)

由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。

在代理模式中,一个类代表另一个类的功能,为其他对象提供一种代理以控制对这个对象的访问。这种类型的设计模式属于结构型模式。

代理模式的实现

1. 创建一个接口

//接口
public interface Product {
    void show();
}

2. 创建接口的实体类

//接口的实体类
public class RealProduct implements Product {
    @Override
    public void show() {
        System.out.println("获取到一个真实产品RealProduct!");
    }
}

3. 创建接口的代理类

代理类提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。在代码中,一般代理会被理解为代码增强,实际上就是在原代码逻辑前后增加一些代码逻辑,而使调用者无感知。

//接口的代理类
public class ProxyProduct implements Product {
    private RealProduct realProduct;

    @Override
    public void show() {
        if(realProduct == null){
            realProduct = new RealProduct();
        }

        pre();          //代理增强方法,处理代理之前要做的事情
        realProduct.show();
        post();         //代理增强方法,处理代理之后要做的事情
    }

    public void pre(){
        System.out.println("代理之前要做的事情");
    }

    public void post(){
        System.out.println("代理之后要做的事情");
    }
}

4. 使用代理类来获取实体类的对象

public class ProxyMain {
    public static void main(String[] args) {
        ProxyProduct proxyProduct = new ProxyProduct();
        proxyProduct.show();
    }
}

前面几节的内容供大家参考

  • 什么是设计模式:【每天一个java设计模式(零)】 - 设计模式基本概念及七大设计原则
  • 工厂模式:【每天一个java设计模式(一)】 - 工厂模式
  • 抽象工厂模式: 【每天一个java设计模式(二)】 - 抽象工厂模式
  • 单例模式:【每天一个java设计模式(三)】 - 单例模式
  • 原型模式:【每天一个java设计模式(四)】 - 原型模式
  • 建造者模式: 【每天一个java设计模式(五)】 - 建造者模式
  • 适配器模式 :【每天一个java设计模式(六)】 - 适配器模式

下一节:
桥接模式:【每天一个java设计模式(八)】 - 桥接模式

相关文章