【结构型模式之代理模式(静态)】

1.静态代理模式应用场景

  • 框架AOP,面向切面
  • 扩展系统功能
  • 在一定程度分离职责
  • 安全代理:屏蔽对真实对象的访问
  • 远程访问:通过代理类处理远程方法调用(RMI)
  • 延迟加载:先加载轻量级的代理对象,真正需要的时候加载真实对象

2. 静态代理模式的案例

这里拿明星和明星的助理为例,说明静态代理

2.1 创建明星活动的接口

public interface IStar {
    /**
     * 面谈
     */
    void confer();

    /**
     * 签合同
     */
    void signContract();

    /**
     * 订票
     */
    void bookTicket();

    /**
     * 唱歌
     */
    void sing();

    /**
     * 收钱
     */
    void collectMoney();
}

2.2 创建明星类

public class Star implements IStar {
    private String name;

    public Star(String name) {
        this.name = name;
    }

    @Override
    public void confer() {}

    @Override
    public void signContract() {}

    @Override
    public void bookTicket() {}

    @Override
    public void sing() {
        System.out.println(this.getName() + "演唱会唱歌~ ~ ~");
    }

    @Override
    public void collectMoney() {}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

2.3 创建明星代理: Proxy

public class Proxy implements IStar {

    private Star star;

    public Proxy(Star star) {
        this.star = star;
    }


    @Override
    public void confer() {
        System.out.println("代理人去面谈");
    }

    @Override
    public void signContract() {
        System.out.println("代理人去签合同");
    }

    @Override
    public void bookTicket() {
        System.out.println("代理人去订票");
    }

    @Override
    public void sing() {
        System.out.println("代理人去布置会场 ~");
        star.sing();
    }

    @Override
    public void collectMoney() {
        System.out.println("代理人去收钱");
    }
}

2.4 测试

public class Client {
    public static void main(String[] args) {
        IStar proxy = new Proxy(new Star("杨幂"));
        proxy.confer();
        proxy.signContract();
        proxy.bookTicket();
        proxy.sing();
        proxy.collectMoney();
    }
}

结果输出:

	代理人去面谈
	代理人去签合同
	代理人去订票
	代理人去布置会场 ~
	杨幂演唱会唱歌~ ~ ~
	代理人去收钱

3. 代理模式可以和哪些其他的设计模式结合呢?

  • 可以与工厂结合
  • 单例模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值