【Android】单例模式【手撕】【Kotlin极简实现】【应用场景】

设计模式-设计原则

设计模式六大原则:

单一指责原则:就是一个类而言,应该仅有一个引起它变化的原因(解耦,减少职责耦合)

开放封闭原则:类,模块,函数等应该可以拓展的,但不可修改(增加一个抽象的功能)

里氏替换原则:所有引用父类的地方必须要透明底使用其子类的对象(里氏替换原则是实现开放封闭原则的重要方式之一)

依赖倒置原则:高层模块不应该一来底层模块,两者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象

迪米特原则(最少知识原则):一个软件实体应当尽可能少地与其他实体发生相互作用

接口隔离原则:一个类对另一个类的依赖应该建立在最小的接口上

设计模式-分类23种

创建型设计模式,共5种:单例模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式

结构型设计模式,共7种:适配器模式,装饰模式,代理模式,外观模式,桥接模式,组合模式,享元模式

行为型设计模式,共11种:策略模式,模板方法模式,观察者模式,迭代器模式,责任链模式,命令模式,备忘录式,状态模式,访问者模式,中介者模式,解释器模式。

设计模式-单例模式

单例模式是最常用,最基础的设计模式,它主要用于避免创建重复的对象。全局最多有且只有一个实例。

手撕

面试也常有手撕设计模式,而单例模式出场率高达90+%,所以这时候把下面这段代码丢给面试官就好了

public class Singleton{
    //静态变量实例
    private static Singleton instance;
    //私有化构造函数,避免外部实例化
    private Singleton(){}
    //同步实例,如果实例为空则创建,否则直接返回缓存的实例即可
    public synchronized static Singleton getInstance(){
        if(instance == null) instance = new Singleton();
        return instance;
    }
}

如果你实在想不起上面的代码(最好撸多几次),那么kotlin将给你带来福利

kotlin极简实现

object Singleton{}

是的,就是这样。写完了。(OMG,有没有爱上kotlin?)

使用场景

如果面试的时候,有可能还会问你一些你使用过的场景,或者见过的单例模式。(如果没有问,也可以说说自己遇到过的单例模式)

我谈谈个人经历:我们通常会设计一个类继承Applicaiton,作为app的程序入口,处理一些事务。其实这个也是一个单例模式;还有自己写过的一个ActivityManager,用来管理所有的Activity;EventBus中也出现了单例模式的使用,它内部缓存了各个组件发送过来的event对象,并负责分发出去,各个组件需要向同一个EventBus注册自己,才能接收到event事件,肯定是需要全局唯一的对象,所以采用了单例模式。

ActivityManager

/**
 * @author Quincy
 * @Date 2020/3/19
 * @Description Activity管理类
 */

public class ActivityManager {
    private List<Activity> activities = new ArrayList<Activity>();
    private static ActivityManager instance;


    private ActivityManager() {
    }

    public synchronized static ActivityManager getInstance() {
        if (null == instance) {
            instance = new ActivityManager();
        }
        return instance;
    }
    //在Activity基类的onCreate()方法中执行

    public void addActivity(Activity activity) {
        activities.add(activity);
    }
    //注销是销毁所有的Activity
    public void OutSign() {
        for (Activity activity : activities) {
            if (activity != null) {
                activity.finish();
            }
        }
    }

}

后记

    今天是撸《第一行代码》(第三版)的第一天,其实在17年的时候,已经撸过一遍kotlin的基本知识点,当时觉得什么鬼啊,反人类的设计,可读性好差。However,

PS: 秉持着联机学习 1+1>2的原则,欢迎大家指点批评,互相交流学习~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q-CODER

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值