Java 设计模式(五)设计模式的区别

  本系列文章共分为五篇:
    设计模式的分类与原则
    创建型模式
    结构型模式
    行为型模式
    设计模式的区别
  在之前的文章中,简单总结了一下各种设计模式。此时,有必要从总体上去对比、总结一下,这样能更好地理解与掌握。

一、设计模式的适用场景

  这个章节,对23种设计模式的不同点做了一些简单总结,以便更直观地从全面把握,具体如下:

模式      适用场景 例子
单例模式 只要求生成一个对象
需要频繁实例化,而创建的对象又频繁被销毁
线程池
Android应用中的全局Context
工厂方法模式 父工厂类中只有创建产品的抽象接口,将产品对象的实际创建工作推迟到具体子工厂类当中 老师布置作业,要学生制作一个机甲玩具,小明做了奥特曼,小李做了变形金刚
抽象工厂模式 系统中有多个产品类,但每次只使用其中的某一类产品 依旧以老师布置作业为例,老师除了布置机甲作业外,还可能布置书法练习作业,小明写了楷书,小李写了行书
建造者模式 对象可以分模块初始化 Android中的AlertDialog
原型模式 不同对象之间相似度搞
创建对象比较麻烦,但复制比较简单
clone
适配器模式 不同模块之间接口不一致 插口转换器
桥接模式 不同类都有多个变化的维度,这些维度可以组合成不同的结果 如颜色(有黑色、灰色)与书包(有双肩包、挎包),可以组合成四种不同的包
组合模式 表示一个对象整体与部分的层次结构 文件夹与文件
装饰器模式 不影响原有模块功能,需要动态地添加、撤销一些附属功能 在原有模块中加入日志打印
外观模式 隐藏子系统的复杂操作,对外提供简单的接口 找代购者买商品,代购者会进行货物挑选、议价、买入等流程
享元模式 系统中存在大量相同或相似的对象,只保存一个就行 围棋中的黑白子
代理模式 控制访问权限 不同管理层可以看到公司不同程度的财务账目
模板模式 子类执行固定步骤下的不同具体步骤 优酷和爱奇艺都决定在6月推出悬疑剧集,爱奇艺推出了《十日游戏》,优酷推出了《失踪人口》
策略模式 不同算法互相替代使用 要进行排序时,可以使用快速排序,也可以使用插入排序
状态模式 状态在很大程度上决定了系统的运行 开关
观察者模式 对象间存在一对多关系,一个对象的状态发生改变会影响其他对象 群发邮件
备忘录模式 需要保存与恢复数据的场景 Ctrl + Z
中介者模式 不同对象之间关系复杂,需要调整 买房者、卖房者与中介
迭代器模式 为遍历某种结构提供统一接口 遍历器Iterator
解释器模式 语言的文法较为简单,格式固定 XML、JSON解析
命令模式 请求调用者与请求接收者解耦 物理老师给物理课代表下了一个命令:找出办理物理成绩最好的人
责任链模式 有多个对象可以处理一个请求 不同级别的人可以批准不同时长的假期
访问者模式 对象结构中的对象需要提供多种不同且不相关的操作,而且要避免让这些操作的变化影响对象的结构 浏览不同的电商网站购买衣服

二、设计模式的区别

2.1 状态模式与策略模式

  状态模式处理对象所处的状态,封装了依赖于状态的行为;策略模式处理对象如何执行特定的任务,它封装的是算法。

2.2 策略模式与模板方法模式

  在模板方法中,算法是在编译时通过继承选择的。使用策略模式,算法在运行时通过组合选择。

2.3 代理模式与装饰模式

  代理模式控制对象访问权限,装饰模式用于向对象添加职责。

2.4 工厂模式与创建者模式

  创建者模式可以将零件对象组装成整体,而工厂模式直接给出完整的对象。

2.5 访问者模式与迭代器模式

  访问者模式一般遍历复杂结构,如树结构或组合结构等,结构中每个结点可以同构也可以异构,前提是只要提供一个预定的统一访问接口即可。迭代器模式用于遍历元素类型一致的集合(多是线性结构,当然也可以是非线性结构),不用为每个元素定义统一的访问接口。

2.6 适配器模式与外观模式

  适配器模式一般只包装一个对象,目标是为了改变接口来适应外部系统,但要完成的功能没变。外观模式 一般是将一个子系统进行包装,目的是简化接口。

2.7 装饰器模式与适配器模式

  装饰器模式是为了给现有对象增加功能,一般接口不变或接口增加。适配器模式是为了改变其接口,功能保持不变。

2.8 工厂模式与原型模式

  工厂模式是重新实例一个对象,原型模式是从已有的实例直接拷贝生成一个实例,从而省去了初始化的过程。

2.9 备忘录模式与命令模式

  两种模式都可以提供回到先前某点的功能,但前者是针对对象状态,后者针对对象行为。
  参考资料:那些相似的设计模式的区别

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章