美文网首页
4、代理模式

4、代理模式

作者: barry | 来源:发表于2017-07-13 14:30 被阅读21次

1.概述

      因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ? 你有想过限制访问某个对象,也就是说,提供一组方法给普通用户,特别方法给管理员用户?以上两种需求都非常类似,并且都需要解决一个更大的问题:你如何提供一致的接口给某个对象让它可以改变其内部功能,或者是从来不存在的功能? 可以通过引入一个新的对象,来实现对真实对象的操作或者将新的对象作为真实对象的一个替身。即代理对象。它可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外服务。

例子1:经典例子就是网络代理,你想访问facebook或者twitter ,如何绕过GFW,找个代理网站。
例子2:可以调用远程代理处理一些操作如图:


代理模式.png

代理接口

//代理接口
protocol GiveGift {
    
    func giveDolls()
    
    func giveFlowers()
    
    func giveChocolate()
    
}

被代理类

//被代理人
class Pursuit: NSObject, GiveGift {
    
    var girl: SchoolGirl?
    
    init(mm: SchoolGirl) {
        
        girl = mm
        
        super.init()
    }
    
    func giveDolls() {
        print("送布娃娃")
    }
    
    func giveFlowers() {
        print("送花")
    }
    
    func giveChocolate() {
        print("送巧克力")
    }
}

代理类

//代理人,
class Proxy: NSObject, GiveGift {
    
    //代理对象
    var gg: Pursuit?
    
    init(mm: SchoolGirl) {
        gg = Pursuit(mm: mm)
    }
    
    func giveDolls() {
        gg?.giveDolls()
    }
    
    func giveFlowers() {
        gg?.giveFlowers()
    }
    func giveChocolate() {
        gg?.giveChocolate()
    }
}

被代理类要访问的对象类

//代理直接接触的对象
class SchoolGirl: NSObject {
    
    var name: String?
    
    init(name: String) {
        self.name = name
    }
}

用法

       //代理承受人
        let mm = SchoolGirl(name: "娇娇")

        //代理(gg 被代理人内部自动创建一个默认值)
        let daili = Proxy(mm: mm)

        daili.giveDolls()
        
        daili.giveFlowers()
        
        daili.giveChocolate()

相关文章

  • 设计模式

    1.代理模式 静态代理; 动态代理: 2.工厂模式 3.装饰模式 4.观察者模式

  • Java动态代理解析

    动态代理原理解析 一. 代理模式例子: 目标类及代理类统一接口 目标实现类 自定义的代理模式处理程序 4.代理模式...

  • 4,代理模式

    1。定义 代理模式:为其他对象提供一种代理以控制对这个对象的访问 2,UML图 3,代理模式基本代码 4,代理模式...

  • 代理模式vs装饰模式 and 静态代理vs动态代理

    目录:1.代理模式定义&实现2.装饰模式定义&实现3.静态代理4.动态代理:JDK动态代理、Cglib动态代理5....

  • 四、结构性模型

    1.代理模式2.装饰模式3.外观模式4.适配器模式 1.代理模式 让类和类进行组合,获得更大的结构 代理模式(Pr...

  • spring框架中的设计模式二

    在这篇文章中,介绍4种设计模式。结构型设计模式:代理和复合模式。行为型设计模式:策略和模板方法模式。 代理模式 面...

  • 4、代理模式

    1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 (...

  • 4、设计模式----代理模式

    代理模式,为其他对象提供一种代理以控制对这个对象的访问。 应用场景: 1.远程代理,也就是为一个对象在不同的地...

  • 设计模式(4)-代理模式

    代理模式(Proxy)是通过代理对象访问目标对象,这样可以在目标对象基础上增强额外的功能,如添加权限,访问控制和审...

  • 听说有人面试被问了设计模式?跟我学,结合Mybatis源码去回答

    1、Builder模式 2、工厂模式 3、单例模式 4、代理模式 5、组合模式 6、模板方法模式 7、适配器模式 ...

网友评论

      本文标题:4、代理模式

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