近段时间的学习碎片整理(3)

面向对象设计的六大原则

(参考面向对象设计六大原则_F的博客-CSDN博客_面向对象的设计原则

  • 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()
          }
      
      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值