设计模式之禅学习笔记08--代理模式

1.代理模式

    是一个使用率非常高的模式。代理模式也叫委托模式,他是为其他对象提供一种代理以控制对这个对象的访问

    类图:代理主题角色和具体的主题角色具有相同的抽象主题接口

                                   

   Subject抽象主题角色:

     抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求。

  RealSubject具体主题角色:

    也叫做被委托角色、被代理角色。它才是冤大头,是业务逻辑的具体执行者。

  Proxy代理主题角色:

     也叫做委托类、代理类。它负责对真实角色的应用,把所有抽象主题类定义的方法限制。委托给真实主题角色实现,并且在真实主题角色处理完毕前后做预处理和善后处理工作。

  2.举个例子

    创建一个抽象主题类,常用的是接口

package com.wx.proxypattern.base;
/*
  Subject抽象主题角色:
  抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求
 */
public interface Subject {
    public  void request();
}

 创建一个具体主题类,也叫委托类,实现抽象主题类。

package com.wx.proxypattern.imp;

import com.wx.proxypattern.base.Subject;
/*
也叫做被委托角色、被代理角色。是业务逻辑的具体执行者。
 */
public class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.println("需要被代理的角色");
    }
}

 创建一个代理主题角色SubjectProxy,实现抽象主题接口。并通过构造函数来传递代理者。

package com.wx.proxypattern.imp;
import com.wx.proxypattern.base.Subject;
/*
  代理主题角色
 */
public class SubjectProxy implements Subject {
    //要代理哪个实现类
    private Subject subject=null;
    //被默认代理者
    public SubjectProxy()
    {

        this.subject=new RealSubject();
    }
    //通过构造函数传递代理者
    public SubjectProxy(Subject subject)
    {

        this.subject=subject;
    }
    @Override
    public void request() {
        this.before();
        this.subject.request();
        this.after();
    }
    //预处理
    public void before()
    {
           System.out.println("预处理");
    }
    //善后处理
    public void after()
    {
           System.out.println("善后处理");
    }
}

 测试:

package com.wx.proxypattern.test;

import com.wx.proxypattern.base.Subject;
import com.wx.proxypattern.imp.SubjectProxy;
import com.wx.proxypattern.imp.RealSubject;

public class TestProxy {
    public static void main(String[] args)
    {
        Subject subject=new RealSubject();
        SubjectProxy proxy = new SubjectProxy(subject);
        proxy.request();
    }
}

代理模式的优点:

职责清晰

真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理

完成一件事务,附带的结果就是编程简洁清晰。

高扩展性

具体主题角色是随时都会发生变化的,只要它实现了接口,甭管它如何变化,都逃不脱如来佛的手掌(接口),那我们的代理类完全就可以在不做任何修改的情况下使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时空恋旅人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值