美文网首页
Kotlin实现代理模式

Kotlin实现代理模式

作者: 在一颗大大大榕树下 | 来源:发表于2019-03-25 16:05 被阅读0次

说白了,代理模式就是给一个类提供代理类,让外部可以调用代理类而不需要调用类的本身。
这样做的好处,当需求产生差异时,我们只需要修改代理类中的方法,而不需要改变类本身,极大简化了本身类的逻辑。

好了,语言是苍白的,代码才是明明白白的。

上重点。

静态代理

静态代理需要一个接口

interface IUserInfo {
    fun getUserInfo(str:String):String
}

需要代理的类

class MainUserInfo:IUserInfo {
    override fun getUserInfo(str: String): String {
        return mainMethod()+str
    }


    private fun mainMethod(): String {
        return "I'm mainMethod"
    }
}

代理类

//class StaticProxyUserInfo constructor(iUserInfo:IUserInfo):IUserInfo {
//    private val iUserInfo:IUserInfo = iUserInfo
//    
//    override fun getUserInfo(str: String): String {
//        return iUserInfo.getUserInfo(str)
//    }
//}
//在kotlin有更加酷的写法,一行搞定
class StaticProxyUserInfo constructor(iUserInfo:IUserInfo):IUserInfo by iUserInfo

调用

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val mainInfo = MainUserInfo()
        val proxyUserInfo = StaticProxyUserInfo(mainInfo)
        tv.setOnClickListener {
            tv.text = proxyUserInfo.getUserInfo("代理")
        }
    }
}

效果



动态代理

动态代理和静态代理的区别在于

  • 不需要实现接口
  • 不需要代理类(由虚拟机来实现)
    优点:我们都知道传统的java实现静态代理时,需要为每一个需要代理的类写一个代理类,如果需要100个代理类基本就要累死了。动态代理就是为了让代码简化,从而优雅的实现代理。
    从反向来说呢,如果代理之前并不确定需要代理的类,也只能使用动态代理。
public static void main(String[] args) {
    Shopping women = new ShoppingImpl();
    // 正常购物
    System.out.println(Arrays.toString(women.doShopping(100)));
    // 招代理
    women = (Shopping) Proxy.newProxyInstance(Shopping.class.getClassLoader(),
            women.getClass().getInterfaces(), new ShoppingHandler(women));

    System.out.println(Arrays.toString(women.doShopping(100)));
}

kotlin是没有动态代理的Api,直接使用java代码转换会报错。本身by的方式已经对代理做了极大简化,所以才没有特意去做动态代理的API。

相关文章

  • kotlin学习日记(5)

    kotlin-代理属性(by) 代理模式客户端使用一个代理对象实现对真实对象的访问,代理对象和真实对象实现相同的接...

  • Kotlin介绍系列(三)高级用法之Delegation

    代理模式已经被证明是实现继承的一个优秀的替代方式,而Kotlin的Delegation语法方便地实现了代理模式,而...

  • Kotlin by 关键字解读(委托)

    by 就是Kotlin 帮我们实现代理模式的捷径。by可以实现两种代理,一种是接口代理,一种是属性代理。 首先看接...

  • Kotlin实现代理模式

    说白了,代理模式就是给一个类提供代理类,让外部可以调用代理类而不需要调用类的本身。这样做的好处,当需求产生差异时,...

  • Kotlin基础(10)-代理模式在kotlin中的使用

    前言 本文简要介绍代理模式在kotlin中的使用 手写一个代理模式 定义一个接口中定义行走方法,并在坦克类中实现行...

  • 探究 Kotlin 类代理

    Kotlin 实现类代理是通过 by 关键字,本文尝试讲解类代理在 Kotlin 的具体使用和实现原理。 首先,在...

  • Kotlin中的委托

    Kotlin中的委托 啥是委托 其实kotlin中的委托的理念就是委托模式也是叫做代理模式;在Kotlin中委托有...

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

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

  • kotlin代理模式

    koltin的特性大多不是空穴来风,而是为了解决一些固有问题。 kotlin代理模式官方文档地址:http://k...

  • 3.接口代理

    接口方法交给代理类实现 关键字 by 其中用kotlin接口代理,SeniorManager可以这样写

网友评论

      本文标题:Kotlin实现代理模式

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