代理模式-大话设计模式

简介: 代理模式-大话设计模式

一、定义

代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。


著名的代理模式例子为引用计数(英语:reference counting)指针对象。


当一个复杂对象的多份副本须存在时,代理模式可以结合享元模式以减少存储器用量。典型作法是创建一个复杂对象及多个代理者,每个代理者会引用到原本的复杂对象。而作用在代理者的运算会转送到原本对象。一旦所有的代理者都不存在时,复杂对象会被移除。


二、组成及特点

抽象角色:通过接口或抽象类声明真实角色实现的业务方法。


代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。


真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。


特点


(1).职责清晰


真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。


(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。


(3).高扩展性


三、类结构图

四、实现

//送礼物接口
public interface IGiveGift {
    void giveDolls();
 
    void giveFlowers();
 
    void giveChocolate();
}
//被代理对象
public class SchoolGirl {
    private String name;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}
//追求者
public class Pursuit  implements IGiveGift{
    private SchoolGirl mm;
 
    public Pursuit(SchoolGirl mm) {
        this.mm = mm;
    }
 
    public void giveDolls(){
        System.out.println("giveDolls");
    }
    public void giveFlowers(){
        System.out.println("giveFlowers");
    }
    public void giveChocolate(){
        System.out.println("giveChocolate");
    }
}
//代理
public class Proxy implements IGiveGift {
    private Pursuit gg;
 
    public Proxy(SchoolGirl gg) {
        this.gg = new Pursuit(gg);
    }
 
    @Override
    public void giveDolls() {
        gg.giveDolls();
    }
 
    @Override
    public void giveFlowers() {
        gg.giveFlowers();
    }
 
    @Override
    public void giveChocolate() {
        gg.giveChocolate();
    }
}

目录
相关文章
|
2月前
|
设计模式 缓存 监控
【设计模式系列笔记】代理模式
代理模式是一种结构型设计模式,它允许一个对象(代理对象)控制另一个对象的访问。代理对象通常充当客户端和实际对象之间的中介,用于对实际对象的访问进行控制、监控或其他目的。
51 1
|
2月前
|
设计模式 缓存 安全
小谈设计模式(8)—代理模式
小谈设计模式(8)—代理模式
|
2月前
|
设计模式 JavaScript Java
设计模式——代理模式
一文讲清楚设计模式中的代理模式
30 0
设计模式——代理模式
|
2月前
|
设计模式 Java
Java一分钟之-设计模式:装饰器模式与代理模式
【5月更文挑战第17天】本文探讨了装饰器模式和代理模式,两者都是在不改变原有对象基础上添加新功能。装饰器模式用于动态扩展对象功能,但过度使用可能导致类数量过多;代理模式用于控制对象访问,可能引入额外性能开销。文中通过 Java 代码示例展示了两种模式的实现。理解并恰当运用这些模式能提升代码的可扩展性和可维护性。
37 1
|
2月前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
|
2天前
|
设计模式 监控 安全
设计模式之代理模式(Java)
设计模式之代理模式(Java)
|
3天前
|
设计模式 安全 Java
Java设计模式:代理模式的静态和动态之分(八)
Java设计模式:代理模式的静态和动态之分(八)
|
3天前
|
设计模式 JavaScript 前端开发
JavaScript设计模式——代理模式
JavaScript设计模式——代理模式
|
4天前
|
设计模式 Java
Java设计模式之代理模式详解
Java设计模式之代理模式详解
|
10天前
|
设计模式 编解码 网络安全
结构型设计模式之代理模式
结构型设计模式之代理模式