美文网首页收藏设计模式
Android设计模式:代理模式

Android设计模式:代理模式

作者: 搬码人 | 来源:发表于2021-11-08 13:43 被阅读0次

    简介

    代理模式:给目标对象提供一个代理对象,并由代理对象控制对目标对象访问。

    代码实例

    背景:水果店与第三方合作,开展了海外水果代购服务

    设计背景
    设计
    package 设计模式6
    
    /**
     *@Description
     *@Author PC
     *@QQ 1578684787
     */
    
    /**
     * 订单接口
     */
    
    interface OrderService{
        fun saveOrder():Int
    }
    
    /**
     * 本地订单
     */
    class OrderServiceImpl:OrderService{
        override fun saveOrder(): Int {
            println("下单成功 订单号:8888")
            return 8888
        }
    }
    /**
     * 海外订单
     */
    class OutOrderServiceImpl:OrderService{
        override fun saveOrder(): Int {
            println("下单成功 订单号:6666")
            return 6666
        }
    
    }
    class ProxyOrder:OrderService{
        //真实的订单服务
        private val orderService = OutOrderServiceImpl()
        override fun saveOrder(): Int {
            println("开始海外下订单")
            return orderService.saveOrder()
        }
    
    }
    /**
     * 代理模式
     * 代理进口水果
     */
    fun main() {
        val orderService = ProxyOrder().also { 
            it.saveOrder()
        }
    }
    

    测试结果


    测试结果

    当然,上方只是简单的说明场景,实战过程中还会遇到更复杂的场景(如动态调用等),只需要简单的转换应用就可以了。

    优点

    • 代理作为调用者和真实主体的中间层,降低了模块间和系统的耦合性。
    • 可以以一个小对象代理一个大对象,达到优化系统提高运行速度的目的。
    • 代理对象能够控制调用者的访问权限,起到了保护真实主体的作用。

    缺点

    • 由于在嗲用着和真是主题之间增加了代理对象,因此可能会造成请求的处理速度变慢。
    • 实现代理模式需要额外的的工作(有些代理模式的实现非常复杂),从而增加了系统的复杂度。

    应用场景

    当一个对象不能或者不想直接访问另一个对象时,可以通过一个代理对象来简介范根。为保证客户端使用的透明性,委托对象和代理对象要实现同样的接口。
    北方恩的对象不想暴露全部内容时,可以通过代理去掉不想被访问的内容。
    根据适用范围,代理模式可以分为以下几种:

    • 远程代理:为一个对象在不同的地址空间提供局部代表,这样系统可以将Server部分的事项隐藏。
    • 虚拟代理:如果要创建一个资源消耗较大的对象,可以先用一个代理对象表示,在真正需要的时候才真正创建。
    • 保护代理:用代理对象控制对一个对象的访问,给不同的用户听过不同的访问权限。
    • 只能引用:在引用原始对象的时候增加额外操作,并对指向原始的引用增加引用计数。

    相关文章

      网友评论

        本文标题:Android设计模式:代理模式

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