黑马程序员技术交流社区

标题: 【广州校区】+【原创】+ 静态代理 [打印本页]

作者: jianhong    时间: 2018-10-11 09:58
标题: 【广州校区】+【原创】+ 静态代理
l 案例简介:
(1)  明星接口(定义唱歌、拍戏方法)
(2)  谢霆锋作为明星(目标对象),需要实现明细接口
经纪人也实现明星接口,唱歌拍戏前要先看看价格是否合适。
/**
* 明星接口:定义规范,约定的作用。
*/
public interface IStar {
    /**
     * 唱歌
     */
    void singing(double money);

    /**
     * 拍戏
     */
    void play(double money);
}
实现:
/**
* 明星刘德华,是目标对象
*/
public class LiuDeHuaStar implements IStar {
    @Override
    public void singing(double money) {
        System.out.println("谢霆锋唱歌一级棒,收费标准:"+money);
    }

    @Override
    public void play(double money) {
        System.out.println("刘德华拍戏棒棒滴,收费标准:"+money);
    }
}
代理

/**
* 静态代理,
* 1. 代理对需要实现与目标对象一样的接口
* 2. 代理类中需要维护一个目标对象
*/
public class LiuDeHuaProxy implements IStar{


    // 创建目标对象
    private IStar target = new LiuDeHuaStar();

    @Override
    public void singing(double money) {
        if (money > 200000) {
            // 调用目标对象方法
            target.singing(money);
        }else {
            System.out.println("我很忙,后期再合作!");
        }
    }

    @Override
    public void play(double money) {
        if (money > 200000) {
            // 调用目标对象方法
            target.play(money);
        }else{
            System.out.println("我很忙,后期再合作!");
        }
    }
}
测试
public class App {
    public static void main(String[] args) {
        // 创建代理对象
        IStar proxy = new LiuDeHuaProxy();

        // 调用代理对象的方法,代理对象会访问目标对象,再目标对象实现基础上额外扩展了一些功能:验证
        proxy.play(1);
        proxy.singing(100001);
    }
}

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







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2