设计模式分类
分类 | 概括 |
---|---|
创建型模式 | 工厂模式 单例模式 建造者模式 原型模式 |
结构型模式 | 适配器模式 桥接模式 过滤器模式 组合模式 装饰器模式 外观模式 享元模式 代理模式 |
行为型模式 | 责任链模式 命令模式 解释器模式 迭代器模式 中介模式 备忘录模式 观察者模式 状态模式 空对象模式 策略模式 模板模式 访问者模式 |
J2EE模式 | MVC模式 业务代表模式 组合实体模式 数据访问对象模式 前端控制器模式 拦截过滤器模式 服务定位器模式 传输对象模式 |
创建型模式
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
工厂模式
应用场景:发送网络请求时,通过不同字段获取不同的请求类型(GET POST PUT DELETE …)
单例模式
应用场景:一个App进程只有一个Application
建造者模式
应用场景:Retrofit通过建造者模式实现不同的回调方式,JSON解析方式等
原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
- 优点:性能高,逃避构造函数的约束
- 应用场景:JAVA中的Object clone()方法
结构型模式
这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
适配器模式
应用场景:ListView,RecyclerView的Adapter使用,将数据与View的不同ItemType结合起来
桥接模式
将抽象部分与实现部分分离,使它们都可以独立的变化。
应用场景:需要将10种矩形与圆形与10种角色进行任意搭配绘制到画布上。星巴客卖咖啡:中杯、大杯、加大坏,可加入口味:牛奶、糖等
过滤器模式
应用场景:List的filter功能使用
组合模式
将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
应用场景:手机文件夹树状结构
装饰器模式
应用场景:ContextWrapper的封装,包装一个人:装上白皮肤是白种人,装上黑皮肤是黑种人,装上黄皮肤是黄种人。对象只是一个人
外观模式
隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。
应用场景:第三库的封装使用,提供给调用者尽量简单的访问接口
享元模式
减少创建对象的数量,以减少内存占用和提高性能。
应用场景:字符串池,Integer -128~127的装箱
代理模式
应用场景:Retrofit接口的请求,暴露给外面的是一个接口,使用动态代理去实现okhttp请求
行为型模式
这些设计模式特别关注对象之间的通信。
责任链模式
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
应用场景:App View的事件分发机制
迭代器模式
这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。
应用场景:JAVA数组集合的访问
中介者模式
这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。
应用场景:聊天室,统一发给中间平台,再由平台发送给指定用户。而不是用户与用户直接交流形成复杂交错的交互网
备忘录模式
保存一个对象的某个状态,以便在适当的时候恢复对象。
应用场景:Activity的onSaveInstanceState
观察者模式
一对多的通信
应用场景:RxJava
策略模式
一个类的行为或其算法可以在运行时更改。
应用场景:一个系统需要动态地在几种算法中选择一种。ContextWrapper的应用