设计模式之静态代理

7 篇文章 0 订阅
7 篇文章 0 订阅

一 背景

为什么叫静态代理?
因为一个角色对应一个代理,多个角色有多个代理类;

在这里插入图片描述
举个例子,见上图。房东是真实的角色,想去租房(定义为一个接口),想去租房,以前是直接找房东就好了。
现在是通过代理来完成租房这件事情。
从图中可以看出,房东和代理都实现了这个接口。我只需要去找房东就好了,按照这个思路写3个类,一个接口就可以了。静态代理核心就是记住这4个角色的关系。

二 实现

2.1 写一个接口,这个接口能完成对数据库的增删改查。

package demo02;

public interface UserService {
    public void  add();
    public void  delete();
    public void  update();
    public void  find();
}

2.2 用户实现这个接口,即真实的角色

package demo02;

import org.springframework.web.servlet.handler.UserRoleAuthorizationInterceptor;

public class UserServiceImpl implements UserService {
    public void add() {
        System.out.println("这里增加了一个");
    }

    public void delete() {
        System.out.println("这里增加了一个");
    }

    public void update() {
        System.out.println("这里增加了一个");
    }

    public void find() {
        System.out.println("这里增加了一个");
    }
}

2.3 引入一个代理,即使用组合模式

package demo02;

public class Proxy implements UserService {
    public void setUser(UserServiceImpl user) {
        this.user = user;
    }

    public  UserServiceImpl user;

    public Proxy() {

    }
    public Proxy(UserServiceImpl user) {
        this.user = user;
    }

    public void add() {
        System.out.println("这里增加了一个");
    }

    public void delete() {
        System.out.println("这里增加了一个");
    }

    public void update() {
        System.out.println("这里增加了一个");
    }

    public void find() {
        System.out.println("这里增加了一个");
    }
}

2.4 下面是Client ,想要去找代理,给我提供服务:

package demo02;

public class Client {
    public static void main(String[] args) {
        //Proxy proxy = new Proxy(new UserServiceImpl());
        Proxy proxy = new Proxy();
        proxy.setUser(new UserServiceImpl());
        proxy.add();
    }
}

Client 直接去找proxy ,以后想增加其他功能,如打印日志,直接在Proxy中增加即可,不用改变原来的UserServiceImpl类,这就是静态代理的好处。缺点是每个真实的角色都需要对应一个代码。动态代理完美的解决了这个问题,可以看笔者另外一篇,设计模式之动态代理,动态代理是AOP的核心,也是注解实现的核心基础,对于web开发人员,掌握这个知识点很重要。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值