面向对象设计的六大原则
(参考面向对象设计六大原则_F的博客-优快云博客_面向对象的设计原则)
- 1、单一职能原则,一个类能引起它变化的原因只有一种
- 2、开闭原则,对扩展开放,对修改闭合
- 3、里氏替换原则,对一个类,在软件里面,把父类都替换成它的子类,程序的行为没有变化
- 4、依赖倒换原则,“设计要依赖于抽象而不是具体化”,用抽象来思考
- 5、接口隔离原则,大的接口打散成多个小接口,解耦
- 6、迪米特原则,一个对象尽量少的去了解其他对象,对象里面尽量少的包含其他对象
Room数据库(使用时犯过的错误记录)
在insert数据时传回的id值没有赋值给数据源列表,导致刚新建的数据马上进行修改和删除操作时发生错误,因为room数据库的修改和删除操作是基于id来进行的
TabLayout+ViewPager的使用(参考Tablayout使用全解,一篇就够了 - 简书)
Tablayout继承自HorizontalScrollView,用作页面切换指示器,因使用简便功能强大而广泛使用在App中。
常用属性:
app:tabIndicatorColor :指示线的颜色
app:tabIndicatorHeight :指示线的高度
app:tabSelectedTextColor : tab选中时的字体颜色
app:tabMode="scrollable" : 默认是fixed,固定的;scrollable:可滚动的
单例模式:这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
kotlin中实现单例模式(参考Kotlin下的5种单例模式 - 简书)
- 饿汉式
-
//Java实现 public class SingletonDemo { private static SingletonDemo instance=new SingletonDemo(); private SingletonDemo(){ } public static SingletonDemo getInstance(){ return instance; } } //Kotlin实现 object SingletonDemo
-
- 懒汉式
-
//Java实现 public class SingletonDemo { private static SingletonDemo instance; private SingletonDemo(){} public static SingletonDemo getInstance(){ if(instance==null){ instance=new SingletonDemo(); } return instance; } } //Kotlin实现 class SingletonDemo private constructor() { companion object { private var instance: SingletonDemo? = null get() { if (field == null) { field = SingletonDemo() } return field } fun get(): SingletonDemo{ //细心的小伙伴肯定发现了,这里不用getInstance作为为方法名,是因为在伴生对象声明时,内部已有getInstance方法,所以只能取其他名字 return instance!! } } }
-
- 线程安全的懒汉式
-
//Java实现 public class SingletonDemo { private static SingletonDemo instance; private SingletonDemo(){} public static synchronized SingletonDemo getInstance(){//使用同步锁 if(instance==null){ instance=new SingletonDemo(); } return instance; } } //Kotlin实现 class SingletonDemo private constructor() { companion object { private var instance: SingletonDemo? = null get() { if (field == null) { field = SingletonDemo() } return field } @Synchronized fun get(): SingletonDemo{ return instance!! } } }
-
- 双重校验锁式
-
//Java实现 public class SingletonDemo { private volatile static SingletonDemo instance; private SingletonDemo(){} public static SingletonDemo getInstance(){ if(instance==null){ synchronized (SingletonDemo.class){ if(instance==null){ instance=new SingletonDemo(); } } } return instance; } } //kotlin实现 class SingletonDemo private constructor() { companion object { val instance: SingletonDemo by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SingletonDemo() } } }
-
- 静态内部类式
-
//Java实现 public class SingletonDemo { private static class SingletonHolder{ private static SingletonDemo instance=new SingletonDemo(); } private SingletonDemo(){ System.out.println("Singleton has loaded"); } public static SingletonDemo getInstance(){ return SingletonHolder.instance; } } //kotlin实现 class SingletonDemo private constructor() { companion object { val instance = SingletonHolder.holder } private object SingletonHolder { val holder= SingletonDemo() } }
-