概述
设计模式是一套被反复使用、多数人知晓、经过分类的、代码设计经验的总结。 为了提高代码可重用性、让代码更容易被他人理解、保证代码可靠性, 使代码编写真正工程化, 是软件工程的基石脉络。
设计模式分类
常用的设计模式有23种,可分为三大类:
- 创建型:【共五种】工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
- 结构型:【共七种】适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
- 行为型:【共十一种】策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
设计模式详解
1、单例模式:
目的是为了让系统中只有一个调用对象,缺点是单例使其他程序过分依赖它,而且不同单例运行在不同进程中,使得维护困难
2、工厂模式:
生产固定的一些东西,如抽象类,缺点是产品修改麻烦;如喜欢动作片和爱情片的人分别向服务器发出同一个请求,就可以得到他们想看的影片集,相当于不同对象进行同一请求,需求均得到满足。
3、抽象工厂模式:
抽象工厂就是生产接口。因为类继承接口就拥有接口的特性。所以我们称这种生产接口的工厂模式为抽象的工厂模式。当然工厂类跟普通工厂一样。可以自己根据需求随意变化。
4、建造者模式:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
5、原型模式:
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。将实现Cloneable的类的对象通过clone方法实现对对象的拷贝。
6、适配器模式:
将一个类的接口转换成客户希望的另外一个接口。不同的数据提供者使用一个适配器来向一个相同的客户提供服务。
7、装饰器模式:
动态地给一个对象添加一些额外的职责。就扩展功能而言, 它比生成子类方式更为灵活。
8、代理模式:
代理是一个中间者的角色,它屏蔽了访问方和委托方之间的直接接触。也就是说访问方不能直接调用委托方的这个对象,而是必须实例化一个跟委托方有同样接口的代理方,通过这个代理方完成对委托方的调用。
9、外观模式
外观模式也称门面模式。当我们开发 Android 的时候,无论是做 SDK 还是封装 API,大多都会用到外观模式,它通过一个外观类使得整个系统的结构只有一个统一的高层接口,这样能降低用户的使用成本。
10、桥接模式:
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
11、组合模式
这种模式在安卓中最常见,Android中的view是一种树形结构,每个viewGroup包含一些列的view,而每个viewGroup本身又可以当做一个view,所以最终手机上呈现出来的界面,是由一个个view组合而成的。
12、 享元模式
缓存池思想“共享”对象,避免重复创建。用map缓存,有就直接取用,没有时创建并push到map里。Message单链表重复利用表头也可以。
13、 策略模式
有一系列的算法,将每个算法封装起来(每个算法可以封装到不同的类中),各个算法之间可以替换,策略模式让算法独立于使用它的客户而独立变化。
14、模板方法模式
定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定的步骤。
15、观察者模式:
一个对象发生改变时,所有信赖于它的对象自动做相应改变。
16、迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
17、责任链模式
有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
18、命令模式
把请求封装成一个对象发送出去,方便定制、排队、取消。
19、备忘录模式
不需要了解对象的内部结构的情况下备份对象的状态,方便以后恢复。
20、状态模式
根据状态的不同,提供不同的行为。
21、访问者模式:
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
22、中介者模式:
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
23、解释器模式:
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
23种设计模式我们简答介绍了,更多《Android技术进阶学习》可以点击前往领取。(里面100w文字+图解Android技术汇总),让你学习更轻松简单。设计模式优点更弱的耦合性,更灵活的控制性,更好的扩展性;但是几乎所有设计模式的通病就是类的膨胀,大量衍生类的创建。
设计的六大原则
- 单一职责原则:一个类只有一个引起它变化的原因
- 开闭原则:即 开放封闭原则, 对扩展是开放的,对修改是封闭的
- 里氏替换原则:任何基类可以出现的地方,子类一定可以出现
- 依赖倒置原则:细节依赖于抽象
- 接口隔离原则:建立单一接口,尽量细化接口
- 迪米特法则 (最少知识原则):一个对象应当对其他对象有尽可能少的了解