美文网首页
代理模式的使用

代理模式的使用

作者: lotawei | 来源:发表于2016-12-05 11:30 被阅读6次

情景

  • 每个人需要找房子
  • 用户直接找房不方便
  • 于是呢,用户和房产中介有一个协议
  • 中介负责找房子,找到符合用户满意的房子中介就可以直接拿中介费

具体实现

  // 代理协议
   protocol   HelpDelegate{
func SomeHelp(other:Any)

  }
  //支付协议
  @objc protocol   Paydelegate{
  @objc optional   func paymoney(money: Int,agent:Any) //可选类型

 }

Person

class  Person : Paydelegate{

    var   name:String = ""

     var    delegate:HelpDelegate?

     private var    acount = 10000
    private  var    wantedprice = (0,0)

init(_ name:String,wantedprice:(Int,Int)) {
    self.name = name
    self.wantedprice = wantedprice
}

func findhouse()  {
    if (self.delegate != nil) {
        
        
        self.delegate?.SomeHelp(other: self)
        
    }
}
func paymoney(money: Int,agent:Any) {
    
    acount -= money
    print("\(self.name) 你支付了"+"\(money),账户余额"+"\(self.acount)"+"-------\(agent)")
    
}}

中介

  class   FcAgent:HelpDelegate {



var    custom:[Person] = [Person]()

var  delegate:Paydelegate?
func SomeHelp( other: Any) {

    
    let   per = other as! Person
    
    print("\(self.name):尊敬的\(per.name), 我们给你找到房子啦,地址在成都市高新区,xxx小区,水月洞天,请及时入住 ,月租450")
    //得到房子租金
     let   price = 450
    
     custom += [per]//添加到已完成找房数组
    if (per.wantedprice.0 < price )  && (per.wantedprice.1 > price)  {
        
        //可以通知用户交租金了
        if self.delegate != nil {
            self.delegate?.paymoney!(money: price,agent:self)
        }
        
    }
    else{
        
        
    }
    
    
}


var   name:String = ""
init(_ name:String) {
    self.name = name
}

   }

//调用

  let   person = Person("张永昊",wantedprice: (300,500))
  let  agent = FcAgent("房产中介")
  person.delegate = agent
  agent.delegate = person
  person.findhouse()

效果

房产中介:尊敬的张永昊, 我们给你找到房子啦,地址在成都市高新区,xxx小区,水月洞天,请及时入住

张永昊 你支付了450,账户余额9550-------FcAgent

好处

  降低对象之间的耦合度
  对象之间不需要直接关心具体的操作

与通知的区别

通知的方式可以多对多
代理方式一般用于一对多
能使用代理方式完成的也能使用通知的方式完成

相关文章

  • 结构型 代理模式(文末有项目连接)

    1:什么是代理模式 2:没用代理模式时的实例 3:使用代理模式将其解耦(静态代理) 3:使用代理模式将其解耦(动态...

  • 从静态代理到动态代理

    代理模式 代理模式是非常常见的设计模式,在功能增强方面使用的特别明显,例如数据库连接池会使用代理连接代理真实的物理...

  • 代理模式(Proxy Pattern)

    1. 简介 代理模式属于设计模式中的结构型模式,有静态代理和动态代理两种实现方式。代理模式使用代理类来控制访问委托...

  • 设计模式学习

    代理模式 英文proxy 或者 surrogate 代理模式使用了真实对象, 或者说纯正的代理模式是这么做的, 实...

  • 搞定代理模式,看懂Retrofit动态代理的骚操作

    代理模式 看完文章你能学到什么?搞懂代理模式,Retrofit代理模式的使用(其实我就是因为没看懂,才学的),文章...

  • Spring学习(五)AOP

    SpringAop使用到了了动态代理模式(有关设计模式见设计模式章节)。JDK动态代理代理的目标类必须要实现接口。...

  • 设计模式之代理模式

    设计模式之代理模式 1.代理模式的定义 为其他对象提供一种代理以控制对这个对象的访问. 2.代理模式的使用场景 当...

  • iOS如何实现多代理模式--OC

    OC 如何实现多代理模式 为什么要使用多代理模式 标题虽然是如何实现多代理模式,但是知道为什么需要实现多代理模式同...

  • kotlin委托

    JAVA代理模式 代理模式定义 为其他对象提供一种代理以控制对象对这个对象的访问。 代理模式的使用场景 当无法或不...

  • 深入理解Java动态代理

    代理模式 使用代理模式创建代理对象,让代理对象来控制对某个对象的访问, 被代理对象可以是远程对象,创建开销大的对象...

网友评论

      本文标题:代理模式的使用

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