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

领动做的企业网站怎么样微小店网站建设费用

领动做的企业网站怎么样,微小店网站建设费用,如何做国外网站推广,网站建设的公司第七页该设计模式适用于创建复杂对象#xff0c;该复杂对象通常是由各个部分的子对象用一定的算法或者步骤构成#xff0c;针对每个子对象内部算法和步骤通常是稳定的#xff0c;但是该复杂对象的确实由于不同的需求而选择使用不同的子对象进行组装。对于构建该复杂的对象#xf…该设计模式适用于创建复杂对象该复杂对象通常是由各个部分的子对象用一定的算法或者步骤构成针对每个子对象内部算法和步骤通常是稳定的但是该复杂对象的确实由于不同的需求而选择使用不同的子对象进行组装。对于构建该复杂的对象通常可以使用builder设计模式。而对于kotlin语言结合高阶函数所实现的建造者设计模式算是DSL代码分享的实践。 比如我们如果想要创建一个Server类 class Server() {var port: Intvar address: String... }但是考虑到创建该对象比较复杂该对象的成员比较多且每一个成员的最终取值需要一定的算法策略为了减少构造函数的参数我们采用为该类添加一个建造者类通过建造者类来创建该Server对象而不是直接new该对象为了在使用中我们直观感受到该建造者类是专门为Server类服务故我们将该建造者类声明为该Server的内部类。 class Server(val serverBuilder: ServerBuilder) {class ServerBuilder {private var port: Int 8080private var address: String fun port(init: ServerBuilder.() - Int) apply { port init() }fun address(init: ServerBuilder.() - String) apply { address init() }fun build(): Server Server(this)} }我们仔细观察下这个建造者类ServerBuilder因为我们是要该类帮我们最终构建Server类那么我们就要求Server Builder要包含Server应该包含的所有的成员port、address等且这些成员都要设置成可变的可重新被赋值的即var。 同时为这些成员都增加一个对应的方法方便从外部注入值。我们仔细观察下port和address方法以port方法为例address方法结构和port方法类似。 port方法的参数接收一个参数该参数是一个lambda表达式一个高阶函数该port的方法的返回值是apply的返回值而我们知道kotlin的apply方法一般是作用于一个对象的且最终的返回值就是这个对象很明显此处的apply方法省略了thisapply的返回值就是当前的ServerBuilder对象完成的写法应该是 this.apply {}其等价于 fun port(init: ServerBuilder.() - Int): ServerBuilder {init()return this }apply的内部则是将lambda的表达式的返回值赋值给了该ServerBuilder对象的port成员。我们再来看下port方法所接收的lambda表达式 ServerBuilder.() - Int注意看此处的ServerBuilder().是什么意思呢在kotlin中classname(). 常用于高阶函数中作为高阶函数的参数。 形如action: (Builder.() - Int) 表示的是Function literals with receiver这是一个方法该方法不接收任何参数该方法返回的是一个int并且该方法是由Builder对象触发。 其实按照如上的使用的时候Idea给我们的提示就可以看出通过将port方法的高阶函数定义为Builder.() - Int就相当于我们为port方法的上下文注入下this而该this就是当前的Builder对象。 最终使用的时候如下 val server Server.ServerBuilder().port {8080}.address { www.baidu.com}借助了apply方法我们可以实现链式调用因为port方法和address函数返回的都是builder对象但是我们观察这种写法还是不够DSL化为此我们给ServerBuilder添加一个构造方法 class ServerBuilder private constructor(){private var port: Int 8080private var address: String // 此处的this(), 表示次构造器要授权给主构造器constructor(init: ServerBuilder.() - Unit): this() { init()}fun port(init: () - Int) apply { port port2() }fun address(init: ServerBuilder.() - String) apply { address init() }fun build(): Server Server(this)}val server Server.ServerBuilder {}.port {8080}.address {www.baidu.com}也可以写成如下把port和address写入ServerBuilder的里面因为ServerBuilder的里面可以拿到this上线文故最终形态class Server private constructor(val port: Int,val address: String, ) {private constructor(builder: ServerBuilder): this(builder.port,builder.address)class ServerBuilder private constructor(){var port: Int 8080var address: String // 此处的this(), 表示次构造器要授权给主构造器constructor(init: ServerBuilder.() - Unit): this() { init()}fun port(init: () - Int) apply { port init() }fun address(init: ServerBuilder.() - String) apply { address init() }fun build(): Server Server(this)} }fun main() {val server Server.ServerBuilder {port {8080}address {www.baidu.com}}.build() }为了进一步DSL化也为了向外界屏蔽ServerBuilder对象我们可以给ServerBuilder添加静态方法 class Server private constructor(val port: Int,val address: String, ) {companion object {// inline fun build(block: ServerBuilder.() - Unit) Builder().apply(block).build()fun build(block: ServerBuilder.() - Unit) ServerBuilder {block()}.build()}private constructor(builder: ServerBuilder): this(builder.port,builder.address)class ServerBuilder private constructor(){var port: Int 8080var address: String // port方法的参数接收一个参数该参数是一个lambda表达式一个高阶函数该port的方法的返回值是//apply的返回值apply的返回值就是当前的ServerBuilder对象完成的写法应该是this.apply// apply的内部则是将lambda的表达式的返回值赋值给了该ServerBuilder对象的port成员// 此处的this(), 表示次构造器要授权给主构造器constructor(init: ServerBuilder.() - Unit): this() { init()}fun port(init: () - Int) apply { port init() }fun address(init: ServerBuilder.() - String) apply { address init() }fun build(): Server Server(this)} } //测试 fun main() {val server Server.build {port {8082}address {www.baidu.com}} }参考 https://stackoverflow.com/questions/44427382/what-does-mean-in-kotlin
http://www.yingshimen.cn/news/129422/

相关文章:

  • 景安一个空间怎么做多个网站wordpress导入 ftp
  • wordpress备份坚果云南昌seo服务
  • 门户网站建设周期智能建站的优势和不足
  • 那些网站可以做信息推广怎么开发公众号平台
  • app网站建设济宁wordpress主机怎么样
  • 网站页面管理罗湖建网站公司
  • 不用代码做网站的工具宁波网站设计企业
  • 前端做项目有哪些网站百度智能云windows系统服务器建站
  • 网站运营难吗一条龙网站建设
  • 做一元云购网站电商网站的建设的主要目的
  • 长宁怎么做网站优化好网站管理程序
  • 阳江网站建设 公司价格建设网站都需要准备什么
  • 长沙长沙建设网站桂林北站到象鼻山景区怎么坐车
  • 好动词做的网站能行吗土木工程网官网登录
  • 正规网站建设空间哪个好建设 网站协议范本
  • 上海专业网站建设服ps网站切图教程
  • php网站文件夹结构关键的近义词
  • 网站咋建立pc做网站服务器
  • 网站规划书市场分析怎么推销自己的网站
  • 网站建设 统一标准体系小程序推广计划怎么做
  • 企业网站推广方案手机wordpress加载图片慢
  • 集团网站建设计划表百度wordpress 抓取
  • 嘉兴房地产网站建设建e网app
  • 有找专业做淘宝网站的美工郑州电力高等专科学校怎么样
  • 有没有和小孩做的网站公司网站建设中心
  • 福州cms模板建站德赞网站建设网站制作
  • 企业网络营销分析seo伪原创工具
  • 徐州营销网站建设报价wordpress邮箱头像
  • 网站 php .netword和the wordpress
  • ps为什么做不了视频网站蚌埠市网站建设公司