接口:

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

kotlin面向对象之接口、代理与委托、单例模式_java

kotlin面向对象之接口、代理与委托、单例模式_类名_02

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

kotlin面向对象之接口、代理与委托、单例模式_java_03

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

kotlin面向对象之接口、代理与委托、单例模式_抽象类_04

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

kotlin面向对象之接口、代理与委托、单例模式_类名_05

kotlin面向对象之接口、代理与委托、单例模式_java_06

然后里面打印一句话:

kotlin面向对象之接口、代理与委托、单例模式_类名_07

接下来应用一下:

kotlin面向对象之接口、代理与委托、单例模式_类名_08

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

kotlin面向对象之接口、代理与委托、单例模式_类名_09

kotlin面向对象之接口、代理与委托、单例模式_类名_10

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

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

kotlin面向对象之接口、代理与委托、单例模式_java_11

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

kotlin面向对象之接口、代理与委托、单例模式_抽象类_12

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

kotlin面向对象之接口、代理与委托、单例模式_java_13

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

kotlin面向对象之接口、代理与委托、单例模式_java_14

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

kotlin面向对象之接口、代理与委托、单例模式_java_15

kotlin面向对象之接口、代理与委托、单例模式_抽象类_16

编译运行:

kotlin面向对象之接口、代理与委托、单例模式_抽象类_17


代理与委托:

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

kotlin面向对象之接口、代理与委托、单例模式_类名_18

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

kotlin面向对象之接口、代理与委托、单例模式_抽象类_19

接下来定义相关的角色:

kotlin面向对象之接口、代理与委托、单例模式_java_20

kotlin面向对象之接口、代理与委托、单例模式_类名_21

接下来应用一下:

kotlin面向对象之接口、代理与委托、单例模式_类名_22

kotlin面向对象之接口、代理与委托、单例模式_类名_23

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

kotlin面向对象之接口、代理与委托、单例模式_java_24

这时再运行:

kotlin面向对象之接口、代理与委托、单例模式_java_25

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

kotlin面向对象之接口、代理与委托、单例模式_java_26

kotlin面向对象之接口、代理与委托、单例模式_抽象类_27


单例模式:

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

kotlin面向对象之接口、代理与委托、单例模式_抽象类_28

下面来验证一下:

kotlin面向对象之接口、代理与委托、单例模式_java_29

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

kotlin面向对象之接口、代理与委托、单例模式_类名_30

此时代码报错了:

kotlin面向对象之接口、代理与委托、单例模式_抽象类_31

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

kotlin面向对象之接口、代理与委托、单例模式_java_32

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

kotlin面向对象之接口、代理与委托、单例模式_抽象类_33