Android中常用设计模式

概述

设计模式,根据前人经验总结出常见软件工程问题的解决思想套路。

设计原则

设计模式是遵循面向对象设计的五个设计原则来设计的,如下:

  • 单一职责原则(SRP)–一个类只能有一个职责,多个职责耦合在一起,会影响复用性。
  • 开放封闭原则(OCP)–对扩展是开放的,而对修改是封闭的
  • Liskov替换原则(LSP)–继承必须确保超类所拥有的性质在子类中仍然成立
  • 依赖倒置原则(DIP)–高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象;抽象不应该依赖于具体,具体应该依赖于抽象。
  • 接口隔离原则(ISP)–使用多个专门的接口比使用单一的总接口要好。

常见设计模式

1、单例模式

最简单的设计模式,避免在内存中频繁的实例化所以将它的对象写成static 静态 这样它的对象就只有一份存在静态内存区使用的时候只须要通过getInstance()就可以直接拿到这个静态对象。常用到的比如数据库管理类DatabaseHelper和输入法管理类InputMethodManager。

//饿汉式
class Singleton {
private static Singleton instance=new Singleton();
private Singleton(){}
    static Singleton getInstance() {
        return instance;
    }
}

//懒汉式
class Singleton {
private static Singleton instance=null;
private Singleton(){}
static Singleton getInstance() {
    if(instance==null)
        instance=new Singleton();
    return instance;
}
}

饿汉式是线程安全的,懒汉式是线程不安全的,如果要考虑线程,可以同步代码块也可以同步方法,同步代码块是最好的方法

2、模板方法

通过把不变的的行为搬移到超类,去除子类中重复的代码来体现它的优势;当不变的和可变的行为在子类实现中混合在一起的时候,不变的行为就会在子类中重复实现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就可以帮助子类摆脱重复不变行为的纠缠。常用到的比如View的Draw方法 如果我们自定义View的话,我们一般也是重写onDraw方法即可。

3、建造者模式

将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
Dialog主要用到建造者模式。AlertDialog.Builder就是具体建造者,另外,它是以匿名类的方式被创建的,而且,Builder类是AlertDialog的内部类,这样,耦合性比较低,这正是面向对象中要达到设计意图之一。 最后调用show函数,它的返回类型正是我们要创建的产品,即AlertDialog。 所以,Builder(具体建造者)是AlertDialog(产品)的内部匿名类,用来创建并显示一个dialog。

4、适配器模式

把一个类的接口变换成客户端所期待的另一种接口,从而使原本不匹配而无法在一起工作的两个,类能够在一起工作。
适配器模式分为类适配器模式和对象适配器模式。ListView用于显示列表数据,但是作为列表数据集合有很多形式,有Array,有Cursor,我们需要对应的适配器作为桥梁,处理相应的数据(并能形成ListView所需要的视图)

5、观察者模式

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
在ListView中Adapter中favoritesAdapter.registerDataSetObserver(mDataSetObserver);;数据改变之后会自动调用。

---------------------------------------------------- 我是分割线 --------------------------------------------------------
更多模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值