kotlin面向对象之接口、代理与委托、单例模式
接口:
对于什么是接口这里就不概述了,跟java中的概念一样,下面直接上代码进行操练:
而男人跟女人的接口当然也是不同的,很显然男人跟女人最大的差别就是拥有"小弟弟"【我黄我暴利】,所以可以在男人的接口中定义一个这样的接口,如下:
接下来则定义一个具体的男人,来实现这个接口:
而作为具体类当然得实现抽象的接口,所以此时标红了,所以接下来实现下:
然后里面打印一句话:
接下来应用一下:
貌似这个接口跟上一次学的抽象类木有啥大的区别,不信,咱们用抽象类来改造一下程序:
这时调用代码完全不用动其结果跟使用接口的方式是一模一样的。从这个例子表现上看貌似确实是没区别,但是肯定是有区别的啦,要不然怎么会推出来不同的概念呢,下面来用文字对其描述一下其区别:“接口是事物的能力,而抽象类是事物的本质”,那如何说明这个问题呢?当然用代码啦,在磊码之前先将IMan还是还原成接口,如下:
先来新建一个人类,它是抽象的,描述了事件的本质:
然后对于男人来需要继承这个人类吃东西的特性,并且他还有一个小弟弟的功能,如下:
为了更清晰的对接口与抽象类有一个直观的理解,接下来新建一个太监类,很显明它可以吃东西,但是没有小弟弟的功能,如下:
通过这个太监的例子,是不是对于接口和抽象类有了一个比较清晰的理解,接下来应用一下:
接下来,咱们将男人与太监装到一上屋子里,如下:
编译运行:
代理与委托:
这里以大头儿子与小头爸爸的故事来展开说明,如下:
首先定义一个洗碗的接口,如下:
接下来定义相关的角色:
接下来应用一下:
接下来引入代理模式,既然小头儿子洗碗只要1块钱,那对于爸爸来说我叫儿子来代替洗碗不就得了,反正老婆大人又不知道,最终给儿子一块钱,自己挣9块钱那也相当happy嘛,那如何委托给儿子来做呢?如下:
这时再运行:
这里爸爸还是可以重写洗碗的方法加一些润色:
单例模式:
这个模式我想不用多解释了,实际当中大量见到的,对于上面的代码其实是有个坑的,如下:
下面来验证一下:
很容易理解啦,因为走构造了,那如果想让儿子是个单例在kotlin中如何搞呢?
此时代码报错了:
当然小头爸爸的代码也报错了,如下:
那怎么修改代码呢?在kotlin中如果是单例对象的话,则不需要在类名之后跟括号了,所以代码修改如下:
kotlin面向对象之接口、代理与委托、单例模式的更多相关文章
- JS中事件代理与委托
在javasript中delegate这个词经常出现,看字面的意思,代理.委托.那么它究竟在什么样的情况下使用?它的原理又是什么?在各种框架中,也经常能看到delegate相关的接口.这些接口又有什么 ...
- JavaScript事件代理和委托
在javasript中,代理.委托经常出现. 那么它究竟在什么样的情况下使用?它的原理又是什么? 这里介绍一下javascript delegate的用法和原理,以及Dojo,jQuery等框架中de ...
- Mybatis学习(2)原始dao开发和使用mapper接口代理开发
基础知识: 1).SqlSessionFactoryBuilder: 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory.将SqlSessionFact ...
- js事件代理(委托)
JavaScript事件代理(委托)一般用于以下情况: 1. 事件注册在祖先级元素上,代理其子级元素.可以减少事件注册数量,节约内存开销,提高性能. 2. 对js动态添加的子元素可自动绑定事件. 之前 ...
- Java面向对象:接口
Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...
- iOS--页面间的代理传值(属性、代理(委托)、代码块、单例、通知)
(一)属性传值 (二)代理(委托)传值 代理传值 适用于 反向传值 (从后往前传) 1.1 创建协议 及协议方法 在反向传值的页面(SecondViewController)中 1.2 创建协议类型的 ...
- 【工作手札】Nginx接口代理可跨域
接口代理nginx配置 location /api/ { proxy_set_header Host api.shenjian.io; proxy_set_header X-Forwarded-For ...
- Mybatis 接口代理的实现(BeanDefinitionRegistryPostProcessor+FactoryBean)
相信在开发中,尤其是mybatis 配置操作中,我们只需要提供一个mapper 接口,然后注入到service 中,就可以进行调用. 按我们的一般逻辑来说,我们并没有进行接口的实现,应该会报空指针异常 ...
- 使用nginx作为webservice接口代理
通常情况下,企业并不会直接开放系统接口给到外网,并且在企业内部同样有SOA或者ESB这样的接口统一管理的工具. 那么,大多数情况下,如果需要与外部系统,如云系统,或者其他企业的系统做接口时采取的方式如 ...
随机推荐
- php文件夹上传下载控件分享
用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个php文件夹上传下载的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助. 以下是实例的部分脚本文件 这里我先 ...
- 让mysql返回的结果按照传入的id的顺序排序
比如id为 1,3,5,44,66,32,21,6 那么返回的结果顺序也是这个顺序 $sql = "select * from ".$this->tableName(). ...
- ES5与ES6常用语法教程之 ①函数写法、创建对象、导入导出模块方式
函数写法区别 计算a, b两个数字之和,有返回值 es5 写法 function add(a, b) { return a + b; } es6 写法(箭头函数) let add = (a, b) = ...
- ASP.NET(C#) 使用 SqlBulkCopy 实现批量插入SQL(快捷简单)
业务需要,系统在处理数据时,每暂存一列数据将他插入到右侧的表格中,再执行批量保存,如图所示: //以前的做法可能是生成一堆 insert into xx values xxx 的sql语句,在程序中去 ...
- 生成器send方法、递归、匿名函数、内置函数
今日内容 1.生成器的send方法. 2.递归:函数自己调用自己 3.匿名函数 4.内置函数 生成器send方法 send的工作原理 1.send发生信息给当前停止的yield 2.再去调用__nex ...
- 【C/C++】对于可重入、线程安全、异步信号安全几个概念的理解
由于前段时间,程序偶尔异常挂起不工作,检查后发现时死锁了,原因就是:在信号处理函数里面调用了fprintf. printf等io函数是需要对输出缓冲区加锁,这类函数对本身是线程安全的,但是对信号处理函 ...
- hadoop3.1.2队列
hapood3.1.2 capacity-scheduler.xml CDH6.2 在配置中输入fair,转成json格式看. yarn资源池配置: CDH--yarn--动态资源池配置 pool_d ...
- [转帖]CENTOS6.6下mysql5.7.11带boost和不带boost的源码安装
CENTOS6.6下mysql5.7.11带boost和不带boost的源码安装 本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuir ...
- SQL的循环嵌套算法:NLP算法和BNLP算法
MySQL的JOIN(二):JOIN原理 表连接算法 Nested Loop Join(NLJ)算法: 首先介绍一种基础算法:NLJ,嵌套循环算法.循环外层是驱动表,循坏内层是被驱动表.驱动表会驱动被 ...
- python-bioInfo-codes-2
1. _tkinter.TclError: no display name and no $DISPLAY environment variable 解决方案: import matplotlibma ...