当前位置: 首页 > news >正文

网站销售系统怎么做搜索引擎整合营销

网站销售系统怎么做,搜索引擎整合营销,做网站怎么那么难,东营市建设网站1.委托模式 委托模式&#xff1a;操作对象不会去处理某段逻辑&#xff0c;而是会把工作委托给另外一个辅助对象去处理。 例如我们要设计一个自定义类的来实现Set&#xff0c;可以将该实现委托给另一个对象&#xff1a; class MySet<T> (val helperSet: HashSet<T>…

1.委托模式

委托模式:操作对象不会去处理某段逻辑,而是会把工作委托给另外一个辅助对象去处理。
例如我们要设计一个自定义类的来实现Set,可以将该实现委托给另一个对象:

class MySet<T> (val helperSet: HashSet<T>) : Set<T> {override val size: Intget() = helperSet.sizeoverride fun isEmpty(): Boolean {return helperSet.isEmpty()}override fun iterator(): Iterator<T> {return helperSet.iterator()}override fun containsAll(elements: Collection<T>) = helperSet.containsAll(elements)override fun contains(element: T) = helperSet.contains(element)override fun contains(element: T) = false  //自己重写该方法来定制功能fun eat() = println("I can eat.")  //新增方法
}

这样就可以让大部分的方法实现调用辅助对象中的方法,少部分的方法实现由自己来重写,甚至加入一些自己独有的方法,那么MySet就会成为一个全新的数据结构类

2.类委托

如上委托模式的代码实现存在一个弊端,如果接口中待实现的方法特别多,那么相应每个都去调用辅助对象中的相应方法实现将会特别复杂
这时候在Kotlin中使用by关键字,再接上受委托的辅助对象,就可以免去之前所写的一大堆模板式的代码了:

class MySet<T>(val helperSet: HashSet<T>) : Set<T> by helperSet {override fun contains(element: T) = false  //自己重写该方法来定制功能fun eat() = println("I can eat.")  //新增方法
}

类委托本质:简化实现委托模式所需要写的很多不必要代码

3.类可以委托给对象的情况

可以的情况:

 a.构造函数中传入
class MyList2(theList: ArrayList<String>) : List<String> by theList {
}
 b.object的属性
class MyList3 : List<String> by theList {object theList : ArrayList<String>()
}
 c.伴生对象中的属性
class MyList4 : List<String> by theList {companion object {val theList: List<String> = ArrayList<String>()}
}
 d.直接创建对象
class MyList6 : List<String> by ArrayList() {
}
 e.调用函数获得对象
fun getDdd() : LinkedList<String> {return LinkedList<String>()
}    class MyList7 : List<String> by getDdd() {
}


不可以的情况:

 a.字段
class MyList : List<String> by theList {  //编译报错,提示:Unresolved reference: theListval theList: List<String> = ArrayList<String>()
}
 b.构造函数中的变量
class MyList8 : List<String> by theList {   //编译报错,提示:Unresolved reference: theListinit {val theList = ArrayList<String>()}
}

4.属性委托

属性委托的核心思想是将一个属性(字段)的具体实现委托给另一个对象去完成
可以看到,这里使用by关键字连接了左边的p属性和右边的Delegate类去完成。当调用p属性的时候会自动调用Delegate的getValue()方法,当给p属性赋值的时候会自动调用Delegate类的setValue()方法

class MyClass {var p by Delegate()
}

Delegate的具体实现:在Delegate类中我们必须实现getValue()和setValue()这两个方法,并且都要使用operator关键字进行声明

class Delegate {var proValue: Any? = null//第一个参数用于声明该Delegate类的委托功能可以在什么类中使用//第二个参数是Kotlin中的一个属性操作类,可用于扩区各种属性相关的值,在当前场景用不着,但必须在方法参数上进行声明//返回值可以声明成【任何类型】,根据具体的实现逻辑去写就可以了operator fun getValue(myClass: MyClass, prop: KProperty<*>) : Any? {return proValue}//前两个参数和getValue()相同//最后一个参数表示具体要赋值给委托属性的值,这个参数类型必须要和getValue()方法返回值的类型保持一致operator fun setValue(myClass: MyClass, prop: KProperty<*>, value: Any?) {proValue = value}
}

现在当我们给p属性赋值时,就会调用Delegate的setValue()方法;当获取p属性的值时,就会调用Delegate类的getValue()方法
如果p属性是使用val关键字声明的,那么就不用在Delegate类中实现setValue()方法,因为它是常量


参考文章:
类声明的右边也能写 by?Kotlin 的接口委托是这么用的

http://www.shuangfujiaoyu.com/news/25438.html

相关文章:

  • 动态网站制作流程seo和sem哪个工资高
  • 诸暨 外贸网站建设百度知道网址
  • 大型门户网站 要求新闻稿范文300字
  • 新疆炒菜哥李健教做新疆菜网站企业网站怎么建立
  • 专门做处理货的网站国家培训网官网
  • 如何做好电商网站平面设计全球搜钻
  • 政务网站建设标准seo流量是什么意思
  • 高端网站建设上公司网站建设方案
  • 做网站推广怎么跟客户沟通互联网营销顾问是做什么的
  • wordpress后台怎么进的班级优化大师怎么下载
  • 建设网站可选择的方案有河源疫情最新通报
  • 南京网站制作公司排名前十微信营销推广方案
  • 网站开发中心济南网站建设方案
  • 图片展示 网站广州 关于进一步优化
  • 开发app需要钱吗昆明seo培训
  • 网站开发教学视频江西seo推广软件
  • 政府网站建设基本情况品牌策略有哪些
  • 网站开发定制怎样在网上推广
  • 做兼职的网站是不是真的长春网站建设技术托管
  • 如何做网站超链接应用宝aso优化
  • 广州制作外贸网站公司seo技术快速网站排名
  • 聊城市网站建设公司搜狗搜图
  • 做360网站优化百度信息流
  • 自己做个网站用什么软件好谷歌seo零基础教程
  • 南充网站建设山东百度推广
  • 苏州瑞熙网站建设互联网营销师培训班
  • 郑州品牌网站建设官网如何做seo搜索引擎优化
  • 创新的沈阳网站建设网站建设方案设计书
  • 网站后台图片深圳网络推广培训
  • 手机页面制作代码360优化大师下载官网