美文网首页
设计模式(十三)-- 代理模式

设计模式(十三)-- 代理模式

作者: 信仰年輕 | 来源:发表于2018-12-03 13:54 被阅读0次

    源代码
    GitHub源代码

    1.本文目标

    本文目标是为了让大家认识并理解代理模式

    2.基本套路

    定义:为其他对象提供一种代理,以控制对这个对象的访问
    类型:结构型
    选择关键点:静态代理选择的关键点是是否要复用被代理的部分功能,动态代理选择的关键点在于能否在将被代理的这一批类当中,找出相同的切入点
    设计原则:体现功能复用
    使用概率:99.99999%
    难度系数:中高

    3.适用场景

    1.保护目标对象
    2.增强目标对象

    4.使用步骤

    1.代理模式有委托方和代理方
    2.委托方定义接口和使用接口中的方法
    3.代理方把代理对象传给委托方并实现委托方的接口,从而实现代理模式

    5.举个栗子

    我们用具体的代码去更好的理解这个设计模式

    5.1栗子说明

    • 背景:现在有一个 添加页面,联系人页面,当在添加页面中添加数据的时候,要把数据传递到联系人页面显示
    • 目的:通过代理模式实现传递数据

    5.2使用步骤

    实现代码如下:
    步骤1.创建委托方要定义接口(就是DataInterface)

    public interface DataInterface {
        /**
         * 添加数据的方法
         */
        void  addData(AddController controller, String name);
    }
    

    步骤2.创建委托方,委托方使用接口中的方法

    public class AddController {
        //定义接口
        public DataInterface mDataInterface;
        public void  addEvent(){
            //使用接口中的方法
            mDataInterface.addData(this,"黄晓明");
        }
    }
    

    步骤3.创建代理方,实现接口

    public class ContactController implements  DataInterface{
        @Override
        public void addData(AddController page, String name) {
            System.out.println("ContactController 添加数据成功 "+page.toString()+ "  名字:"+ name);
        }
    }
    

    步骤4. 测试,代理方把代理对象传给委托方并实现委托方的接口,从而实现代理模式

     public static void main(String[] args) {
            AddController addController = new AddController();
            ContactController contactController = new ContactController();
    
            //代理方把代理对象传给委托方
            addController.mDataInterface = contactController;
            addController.addEvent();
     }
    

    6.优点

    • 代理模式能将代理对象与真实被调用的目标对象分离
    • 一定程度上降低了系统的耦合度,扩展性好
    • 保护目标对象
    • 增强目标对象

    7.缺点

    • 代理模式会早场系统设计中类的数目增加
    • 在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢
    • 增加系统的复杂度

    8.总结

    本文只是对代理模式进行一个分享,接下来会从创建型模式,结构型模式,行为型模式,这三大类展开一个系列分享,大家可以持续进行关注,信仰年輕的设计模式,蟹蟹啦。

    相关文章

      网友评论

          本文标题:设计模式(十三)-- 代理模式

          本文链接:https://www.haomeiwen.com/subject/rvaecqtx.html