代理模式

    1. 定义
    2. 生活小实例
    3. UML类图
    4. 代码演示

    1.定义
    代理模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

    2.生活小实例
    有一天上课时突然传来几声呼噜声,老师停止了讲课朝着生意方向看到了睡着的小明。”小明快醒醒,还没有下课呢“,可是小明没有醒来,于是老是告诉小明的同桌小红(代理)让她替自己叫醒小明。小红叫了小明几声,小明还是没有醒来,于是自己又拍打了小明几下,这时候小明醒了。主观上想要叫醒小明的是老师,但是老师没有叫醒,于是委托小红叫醒小明,小红为了完成老师的委托加入了自己的动作(拍打小明)。

    3.UML类图
    这里写图片描述
    抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
    代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
    真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。

    4.代码演示

    真实对象和代理需要实现的接口

    /**
     * Created by cyy on 2017/1/7.
     *
     * 声明真实角色需要实现的业务方法
     */
    public interface IWake {
        void wake();
    }

    真实对象类老师

    /**
     * Created by cyy on 2017/1/7.
     *
     * 在讲台上讲课的老师突然听到呼噜声,看到小明在睡觉,准备叫醒他
     */
    public class Teacher implements IWake{
    
        @Override
        public void wake() {
            Log.e(Constant.PROXY_LOG_TAG, "小明快醒醒,还没有下课呢");
        }
    
    }

    代理类

    /**
     * Created by cyy on 2017/1/7.
     *
     * 由于老师没有叫醒小明,让小明的同桌小红(代理)替自己把小明叫醒
     */
    public class Proxy implements IWake{
        //有一个真实对象的引用
        private Teacher teacher;
    
        /**
         * 生成代理对象时即生成真实对象
         */
        public Proxy(){
            teacher = new Teacher();
        }
    
        @Override
        public void wake() {
            //执行真实对象的操作
            teacher.wake();
            //代理附加的动作
            clap();
        }
    
        public void clap(){
            Log.e(Constant.PROXY_LOG_TAG, "小红边叫边拍打着小明");
        }
    }
    

    以下是客户端代码

    /**
     * Created by cyy on 2017/1/7.
     *
     * 运用代理模式,由于上课时老师叫不醒睡着的小明,就让小明同桌小红(代理)替自己叫醒小明。这里直接对象是老师,间接代理
     * 是小红,小红帮助老师完成叫醒小明的任务
     */
    public class ProxyActivity extends AppCompatActivity{
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Proxy proxy = new Proxy();
            proxy.wake();
        }
    }

    运行结果
    这里写图片描述

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值