Kotlin笔记03(数据类,单例类)

  1. 1. 数据类与单例类
  2. 2. 单例模式

常见的架构模式有MVP,MVC,MVVM不论是哪个架构,都有M,M就是Model(数据类)。

数据类与单例类

数据类通常要写toString(), eauals()等方法。比如java写数据类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Cellphone{
String brand;
double price;
publi Cellphone(String brand,double price){
this.brand = brand;
this.price = price;
}

@override
public boolean equals(Object obj){
if(obj instanceof Cellphone){
Cellphone other = (Cellphone)obj;
return other.brand.equals(brand) && other.price == price;
}
}
@override
public int hashCode(){
return brand.hashCode() + (int)price;
}
@override
public String toString(){
return "Cellphone(brand="+ brand + ", price=" + price + ")";
}
}

tips: java里面的Object ,在kotlin当中是 Any。 instanceof在kotlin中是 is

是不是感觉很长,好的,轮到kotlin了。简单到难以想象

1
data class Cellphone(val brand:String,val price:Double)

结束了。就只有一句话。kotlin将那些toString,equals等等那些毫无实际逻辑的方法自动生成,大大减少工作量。仅仅需要在class前面加上data即可。’==’相当于equals,’===’就是比较哈希值看是不是同一个对象。

接下来可以测试下

1
2
3
4
5
6
fun main(){
val cellphone1 = Cellphone("小米8",4100.0)
val cellphone2 = Cellphone("小米8",4100.0)
println(cellphone1)
println("cellphone1 equals cellphone2 ${cellphone1 == cellphone2}")
}

单例模式

java常见的单例模式

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Singleton{
private static Singleton instance;
private Singleton(){}
public synchronized static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
public void singletonTest(){
System.out.println("singletonTest is Called.");
}
}

轮到kotlin,简单到可怕

1
object Singleton{}

ok了这个就是单例了,接下来添加方法

1
2
3
4
5
object Singleton{
fun singletonTest(){
println("singletonTest is Called")
}
}

Kotlin当中不需要私有化构造函数,不用提供getInstance(),只要把class改为object关键字,单例类就创建完了。

使用:

1
Singleton.singletonTest()