前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >借图回顾Head first设计模式

借图回顾Head first设计模式

作者头像
MickyInvQ
发布2020-09-27 17:00:54
6700
发布2020-09-27 17:00:54
举报
文章被收录于专栏:InvQ的专栏InvQ的专栏

总体原则

1、封装变化(找到会变化的地方,把它们从不变的地方分离处理) 2、多用组合少用继承 3、针对接口变成而非实现 4、松耦合 5、类对修改关闭,对扩展开放 6、依赖抽象而非具体类 7、只和朋友交谈(迪米特原则) 8、别找我,我会找你(好莱坞原则)

1.策略模式(strategy pattern)

  • 多用组合,少用继承 所谓组合(composition)就是在一个类中,对其他类的引用. 比如,一个类中,有两个接口类型的引用。 设计原则:
这里写图片描述
这里写图片描述

2.观察者模式(observer pattern)

  • 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新
这里写图片描述
这里写图片描述
  • 为了交互对象之间的松耦合设计,松耦合的设计之所以能让我们建议由弹性的OO系统,能够应对变化,是因为对象之间的互相依赖降到了最低
这里写图片描述
这里写图片描述

Java 本身也提供了观察者模式。

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

3.装饰者模式

  • 装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案

用各种配料来修饰一杯饮料的例子:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

java IO类 就是采用了这样的模式

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

4.工厂模式

定义
定义
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

简单工厂模式和工厂模式对比:

首先上简单工厂模式的代码:

这里写图片描述
这里写图片描述

其次上工厂模式的代码:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

所以看了就知道,简单工厂模式在创建对象的时候已经把工厂传进去了,然后通过传进去的工厂创建对象,再对对象进行操作,而工厂模式,则没有将工厂传进去,而是一个框架,让子类去决定如何实现。想象一下,如果你是这个披萨店的老板(披萨店就是一个框架),客户只用告诉你要芝加哥和纽约的披萨,然后你告诉这两个国家的加盟店,他们怎么做你不关心,做好后,送到你手里,你再把这个披萨给客户.

5.单例模式

这里写图片描述
这里写图片描述

下面是经典的单线程单例模式

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

多线程的

这里写图片描述
这里写图片描述

考虑性能的话:

这里写图片描述
这里写图片描述

最佳单例模式:

这里写图片描述
这里写图片描述

单例模式和全局变量的比较:

这里写图片描述
这里写图片描述

6.命令模式

这个模式相对比较简单,就是对封装和组合的极致应用。 下面是headfirst给出的定义:

这里写图片描述
这里写图片描述

对于这个定义,读完后,基本感觉不深,还是看下面的生动例子,回头再来理解。

课表中举了一例子,一个家电万能的遥控器,每个按钮都可以配置化相应的功能,我们人去使用他,也就是给他下命令,然后一切从此说起….

下图中,每一个按钮背后都是一种 命令对象,而命令对象中持有具体接受命令的实体对象。 而我们要做的就是配置这两竖排的按钮,两个一位数组可以搞定。而数组的下标就对应图片中遥控器最左边的要控制的实体对象。

这里写图片描述
这里写图片描述

没有配置的,就按照出厂默认设置。 这里就引出了 空对象 (不是空指针)的设计概念,其实本质就是默认值。

这里写图片描述
这里写图片描述

下面这个就是之前定义所说的,可以引用于日志请求,或者事务系统。

这里写图片描述
这里写图片描述

7.适配器模式

这里写图片描述
这里写图片描述

-下面这个例子很生动的介绍了适配器模式-

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

对比下,之前的装饰着模式和未来的 外观模式

这里写图片描述
这里写图片描述

8.外观模式

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

8.模板模式

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

Java JDK中的 arrays.sort(object obj)方法就是应用了模板模式,传进来的obj对象所对应的类就需要实现compareTo()方法,作为排序的算法依据

9.迭代器模式和组合模式

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

10.状态模式

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

10.代理模式

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

持续更新中Ing….

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-05-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总体原则
  • 1.策略模式(strategy pattern)
  • 2.观察者模式(observer pattern)
  • 3.装饰者模式
  • 4.工厂模式
    • 简单工厂模式和工厂模式对比:
    • 5.单例模式
      • 下面是经典的单线程单例模式
        • 多线程的
          • 考虑性能的话:
            • 最佳单例模式:
              • 单例模式和全局变量的比较:
              • 6.命令模式
              • 7.适配器模式
              • 8.外观模式
              • 8.模板模式
              • 9.迭代器模式和组合模式
              • 10.状态模式
              • 10.代理模式
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档