Java中的代理模式

代理模式的特点:两个子类共同实现一个接口,其中一个子类负责真实业务实现,另一个子类完成辅助真实业务主题的操作。
代理模式其实在我们生活中特别常见,特别是近些年来,大家都喜欢用国外的东西,但又特别贵,特别是女生的化妆品,它贵主要是因为有税和运费,所以大家都喜欢去找代购买化妆品,可以剩下好多钱。
在这个模式中,真实的主题类是你自己,因为掏钱和使用的是你,而代购就是代理类,它只是负责辅助你完成买化妆品这个动作(排队、发快递…)。

例:比如我们要买一台电脑
首先,我们要定义一个业务接口,要定义我们要干什么事,具体是谁来干还不知道,所以要是一个接口。你自己是买电脑的真实客户,但是在买电脑之前和买电脑之后还要干一些事情,但是前后干的这些事和你真实的业务(买电脑)是没有关系的,前和后干的那些事只是辅助操作,所以有一个专门的类来帮你干这些辅助操作,你是买电脑的人,但你不想去排队、取钱、装软件,你想让别人去帮你干这些事,所以才有了代理类。

代理类就是帮你实现真实业务之前和之后的操作。

package www.java.test;

import com.sun.org.apache.xpath.internal.SourceTree;

//业务接口
interface ISubject{
    void buyComputer();
}
//真实主题类
class RealSubjectImpl implements ISubject{
    public void buyComputer(){
        System.out.println("买一台macbookpro");
    }
}
//代理类
class ProxySubjectImpl implements ISubject{
    private ISubject realSubject;
    //构造注入,注入真实主题类,构造函数传入的是接口类型的参数,是因为不知道具体的真实主题类是哪一个,所以传一个接口类型的
    public ProxySubjectImpl(ISubject realISubject){
        this.realSubject = realISubject;
    }
    public void beforeSubject(){
        System.out.println("去银行取钱、排队");
    }
    public void afterSubject(){
        System.out.println("装各种软件.......");
    }
    public void buyComputer(){
        //购买之前的操作
        beforeSubject();
        //真正的操作,但这个操作是客户来完成的,所以需要通过构造方法把真实客户传进来,通过真实主题类来完成这个操作
        this.realSubject.buyComputer();
        //购买之后的操作
        afterSubject();
    }
}
public class Test{
    public static void main(String[] args){
        //通过向上转型把真实主题类传进去了
        ISubject subject = new ProxySubjectImpl(new RealSubjectImpl());
        subject.buyComputer();
    }
}

Java中的代理模式_第1张图片

你可能感兴趣的:(杂记,java)