接口:

对于什么是接口这里就不概述了,跟java中的概念一样,下面直接上代码进行操练:

而男人跟女人的接口当然也是不同的,很显然男人跟女人最大的差别就是拥有"小弟弟"【我黄我暴利】,所以可以在男人的接口中定义一个这样的接口,如下:

接下来则定义一个具体的男人,来实现这个接口:

而作为具体类当然得实现抽象的接口,所以此时标红了,所以接下来实现下:

然后里面打印一句话:

接下来应用一下:

貌似这个接口跟上一次学的抽象类木有啥大的区别,不信,咱们用抽象类来改造一下程序:

这时调用代码完全不用动其结果跟使用接口的方式是一模一样的。从这个例子表现上看貌似确实是没区别,但是肯定是有区别的啦,要不然怎么会推出来不同的概念呢,下面来用文字对其描述一下其区别:“接口是事物的能力,而抽象类是事物的本质”,那如何说明这个问题呢?当然用代码啦,在磊码之前先将IMan还是还原成接口,如下:

先来新建一个人类,它是抽象的,描述了事件的本质:

然后对于男人来需要继承这个人类吃东西的特性,并且他还有一个小弟弟的功能,如下:

为了更清晰的对接口与抽象类有一个直观的理解,接下来新建一个太监类,很显明它可以吃东西,但是没有小弟弟的功能,如下:

通过这个太监的例子,是不是对于接口和抽象类有了一个比较清晰的理解,接下来应用一下:

接下来,咱们将男人与太监装到一上屋子里,如下:

编译运行:

代理与委托:

这里以大头儿子与小头爸爸的故事来展开说明,如下:

首先定义一个洗碗的接口,如下:

接下来定义相关的角色:

接下来应用一下:

接下来引入代理模式,既然小头儿子洗碗只要1块钱,那对于爸爸来说我叫儿子来代替洗碗不就得了,反正老婆大人又不知道,最终给儿子一块钱,自己挣9块钱那也相当happy嘛,那如何委托给儿子来做呢?如下:

这时再运行:

这里爸爸还是可以重写洗碗的方法加一些润色:

单例模式:

这个模式我想不用多解释了,实际当中大量见到的,对于上面的代码其实是有个坑的,如下:

下面来验证一下:

很容易理解啦,因为走构造了,那如果想让儿子是个单例在kotlin中如何搞呢?

此时代码报错了:

当然小头爸爸的代码也报错了,如下:

那怎么修改代码呢?在kotlin中如果是单例对象的话,则不需要在类名之后跟括号了,所以代码修改如下:

kotlin面向对象之接口、代理与委托、单例模式的更多相关文章

  1. JS中事件代理与委托

    在javasript中delegate这个词经常出现,看字面的意思,代理.委托.那么它究竟在什么样的情况下使用?它的原理又是什么?在各种框架中,也经常能看到delegate相关的接口.这些接口又有什么 ...

  2. JavaScript事件代理和委托

    在javasript中,代理.委托经常出现. 那么它究竟在什么样的情况下使用?它的原理又是什么? 这里介绍一下javascript delegate的用法和原理,以及Dojo,jQuery等框架中de ...

  3. Mybatis学习(2)原始dao开发和使用mapper接口代理开发

    基础知识: 1).SqlSessionFactoryBuilder: 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory.将SqlSessionFact ...

  4. js事件代理(委托)

    JavaScript事件代理(委托)一般用于以下情况: 1. 事件注册在祖先级元素上,代理其子级元素.可以减少事件注册数量,节约内存开销,提高性能. 2. 对js动态添加的子元素可自动绑定事件. 之前 ...

  5. Java面向对象:接口

    Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...

  6. iOS--页面间的代理传值(属性、代理(委托)、代码块、单例、通知)

    (一)属性传值 (二)代理(委托)传值 代理传值 适用于 反向传值 (从后往前传) 1.1 创建协议 及协议方法 在反向传值的页面(SecondViewController)中 1.2 创建协议类型的 ...

  7. 【工作手札】Nginx接口代理可跨域

    接口代理nginx配置 location /api/ { proxy_set_header Host api.shenjian.io; proxy_set_header X-Forwarded-For ...

  8. Mybatis 接口代理的实现(BeanDefinitionRegistryPostProcessor+FactoryBean)

    相信在开发中,尤其是mybatis 配置操作中,我们只需要提供一个mapper 接口,然后注入到service 中,就可以进行调用. 按我们的一般逻辑来说,我们并没有进行接口的实现,应该会报空指针异常 ...

  9. 使用nginx作为webservice接口代理

    通常情况下,企业并不会直接开放系统接口给到外网,并且在企业内部同样有SOA或者ESB这样的接口统一管理的工具. 那么,大多数情况下,如果需要与外部系统,如云系统,或者其他企业的系统做接口时采取的方式如 ...

随机推荐

  1. 创建podspec文件,为自己的项目添加pod支持

    Cocoapods作为iOS开发的包管理器,给我们的开发带来了极大的便利,而且越来越多的第三方类库支持Pod,可以通过Pod傻瓜式的集成到自己的工程中,那么问题来了,我自己也有一系列的小工具类,怎么让 ...

  2. MUT值设置、top等命令无法执行、ssh无法登陆、vim命令卡住

    [root@host---- ~]# ifconfig eth0: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu inet 10.1.1.204 n ...

  3. C基础知识(13):内存管理

    如果事先不知道数组的具体长度,则需要动态分配内存.下面是例子. #include <stdio.h> #include <stdlib.h> #include <stri ...

  4. Tor路径选择说明

    Tor Path Specification Roger Dingledine Nick Mathewson Note: This is an attempt to specify Tor as cu ...

  5. 【AMAD】schema -- 使用pythonic的方式进行schema验证

    动机 简介 用法 个人评分 动机 验证数据是否符合规范是很有用的,比如: 用于单元测试 用于验证用户提交的数据是否合法 简介 schema1是一个用来验证python数据结构的库. 可以用来验证诸如: ...

  6. 云计算Openstack介绍(1)

    一.云计算的前世今生 所有的新事物都不是突然冒出来的,都有前世和今生.云计算也是IT技术不断发展的产物. 要理解云计算,需要对IT系统架构的发展过程有所认识. 请看下 IT系统架构的发展到目前为止大致 ...

  7. Microsoft Visual Studio 中工具箱不显示DevExpress控件的解决办法

    我安装的是DevExpress15.2 1.找到安装目录D:\Program Files\DevExpress15.2\Components\Tools, 运行控制台 内容换成cmd 2.执行下面的命 ...

  8. Linux 中账户管理

    账户管理涉及到三个文件: 1./etc/passwd yy@ubuntu:~$ head -n 3 /etc/passwdroot:x:0:0:root:/root:/bin/bashdaemon:x ...

  9. PTA(Basic Level)1042.字符统计

    请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过 1000 的字符串.字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母, ...

  10. Java小知识----POI事件模式读取Excel 2007

    一.知识背景 1.读取excel的方法选择问题 java中读excel中的时间,我们通常用POI去解析,在使用new HSSFWorkbook(NEW FileInputStream(excelFil ...