代理模式-静态代理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gfd54gd5f46/article/details/78111304

静态代理


      静态代理在生活中很常见,举个栗子:你要去超市买水果,你可以委托你的朋友帮你去买,然后你朋友去帮你买了水果。在这个例子中你充当委托者,你朋友充当代理者,代替你去买水果,最后把水果交给你。


UML类图


1


创建抽象的委托者


  • UserService.java
/**
 * 委托类和代理类的接口
 * @author LingDu
 */
public interface UserService {
    public void insert();
}

具体的委托者


  • UserServiceImp.java
/**
 * 委托类
 * @author LingDu
 */
public class UserServiceImp implements UserService {

    @Override
    public void insert() {
        System.out.println("insert success");
    }
}

具体的代理者


  • Proxy.java
/**
 * 代理类,实现UserService接口
 * @author LingDu
 */
public class Proxy implements UserService {

    private UserService userService;

    public Proxy(UserService userService) {
        this.userService = userService;
    }

    @Override
    public void insert() {
        System.out.println("begin...");
        userService.insert();
            System.out.println("end...");
    }
}

测试

public static void main(String[] args) {
    UserService userService = new UserServiceImp();
    Proxy proxy = new Proxy(userService);
    proxy.insert();
}

2


注意:态代理实现中,一个委托类对应一个代理类,代理类在编译期间就已经确定。


静态代理总结


  • 可以做到在不修改目标对象的功能前提下,对目标功能扩展.

  • 缺点 : 因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多.同时,一旦接口增加方法,目标对象与代理对象都要维护



解决方案:代理模式-动态代理

猜你喜欢

转载自blog.csdn.net/gfd54gd5f46/article/details/78111304