Android 设计模式相关面试题

作者: 总会颠沛流离 | 来源:发表于2019-04-29 20:52 被阅读14次

    一 单例介绍

    单例的概念

    单例模式是一种对象创建模式,它用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。

    单例的好处

    对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销。
    由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC停顿时间。

    饿汉:无法对instance实例进行延迟加载
    懒汉:多线程并发情况下无法保证实例的唯一性
    懒汉线程安全:使用synchronized导致性能缺陷
    DCL:JVM即时编译器的指令重排序
    静态内部类/枚举:延迟加载/线程安全/性能优势

    二 Builder模式

    概念

    建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离

    使用场景

    Glide Okhttp AlertDialog
    当构建一个对象需要很多参数的时候,并且参数的个数或者类型不固定的时候

    Builder模式的优点

    松散耦合:生产器模式可以用同一个构建算法构建出表现不同的产品,实现产品构建和产品表现上的分离
    可以很容易的改变产品的内部表示
    更好的复用性:生产器模式很好的实现构建算法和具体产品实现的分离

    Builder模式的缺点

    会产生多余的 Builder 对象以及 Director 对象消耗内存
    对象的构建过程暴露

    总结

    Builder:它为创建一个产品 Product 对象的各个部件指定抽象接口
    ConcreteBuilder:它实现了 Builder 接口,实现各个部件的具体构造和装配方法
    Product:它是被构建的负责对象,包含多个组成部件
    Director:指挥者又称导演类,它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系

    三 适配器模式

    适配器模式定义

    将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以在一起工作,其别名为包装器(Wrapper)

    类适配器

    类适配器定义

    类的适配器模式把适配的类的API转换为目标类的API

    总结
    类适配器使用对象集成的方式,是静态的定义方式
    对于类适配器,适配器可以重定义Adaptee的部分行为
    对于类适配器,仅仅引入了一个对象,并不需要额外的引用来间接得到Adaptee
    对于类适配器,由于适配器直接集成了Adaptee,使得适配器不能和Adaptee的子类一起工作

    对象适配器

    对象适配器定义

    与类的适配器模式一样,对象的适配器模式把被适配的类的API转换为目标类的API,与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类

    总结

    对象适配器使用对象组合的方式,是动态组合的方式
    对于对象适配器而言,一个适配器可以把多种不同的源适配到同一个目标
    对于对象适配器,要重定义Adaptee的行为比较困难
    对于对象适配器,需要额外的引用来间接得到Adaptee

    Adapter模式在Android中的实际应用

    Listview

    三 观察者模式

    发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息
    意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
    何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。
    如何解决:使用面向对象技术,可以将这种依赖关系弱化。

    四 工厂模式

    意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
    主要解决:主要解决接口选择的问题。
    何时使用:我们明确地计划不同条件下创建不同实例时。
    关键代码:创建过程在其子类执行。
    参考于 https://blog.csdn.net/liminwu_6/article/details/72999963

    相关文章

      网友评论

        本文标题:Android 设计模式相关面试题

        本文链接:https://www.haomeiwen.com/subject/yxnunqtx.html