Java中23种设计模式—(关于接口的)代理设计模式

代理模式(Proxy):

为其他对象提供一个代理以控制对这个对象的访问

举例

类比代购:

顾客真正付款的人
代购者帮忙买东西,解决我们无法现场买的问题(辅助解决真实问题)

注意:

1.在物品成交前,买家不知道是哪个代购帮买,代购也不知道具体帮谁买。所以这块用的是接口,而不是具体子类。

private  ISubject realSubject

2.需要的东西:

1)业务接口ISubject:需要干的事-即要买的东西(假如买电脑)-买电脑是核心业务

2)真实业务类:真正付款买东西的买家

3)代理类:辅助我们买东西,有辅助操作-如买东西前后干的事

4)平台:通过平台Platform,将代理人与客户产生联系

5)业务:取得一个业务对象-平台下单

代码实现:

/**
 * 业务接口-需要干的事:即买电脑(买电脑是核心业务)
 */
interface ISubject{
    void buyComputer();
}
/**
 * 真实业务类:真实付款买电脑的人
 */
class RealSubject implements ISubject{
    @Override
    public void buyComputer() {
        System.out.println("买个  mac  pro  15寸顶配电脑");
    }
}
/**
 * 代理类:辅助我们买电脑,有买电脑的辅助操作,即买电脑前preHandle()后postHandle()做的事也包含在代理类
 */
class ProxySubject implements ISubject{
    private ISubject realSubject;//真正成交前,买电脑的人也不知道具体哪个代购帮买,代购也不知道具体要帮谁买,所以这块用的是接口,而不是具体哪个子类
    //通过构造方法把真实业务传进来
    public ProxySubject(ISubject realSubject) {
        this.realSubject = realSubject;
    }
    public void preHandle(){
        System.out.println("买票去某地看好电脑");
    }
    @Override
    public void buyComputer() {
        //调用买前操作
        preHandle();
        //付钱这个操作是通过真实业务处理的-真实的付钱人付钱
        this.realSubject.buyComputer();
        //调用买后操作
        postHandle();
    }
    public void postHandle(){
        System.out.println("再买票把电脑带回来");
    }
}
/**
 * 最终通过平台Platform,将代理人和客户产生联系
 * 创建了代理类,在创建了代理类的同时把客户RealSubject就传入了
 */
class Platform{
    //获取
    public static ISubject getInstance() {
        return new ProxySubject(new RealSubject());//在代购平台上下单
    }
}
/**
 * 业务-买电脑
 */
public class Subject {
    public static void main(String[] args) {
        ISubject subject=Platform.getInstance();//取得一个业务的对象
        subject.buyComputer();
    }
}

总结

代理模式是基于接口的,一个接口实现两个类,一个是真实业务类,另一个是辅助真实业务的代理类,最终将真实业务传递给代理类来完成整个业务的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值