GoF 设计模式:浅浅印象
23种设计模式,常常多个模式结合使用,主要是为了解决中大型软件项目“类和对象”膨胀的问题,进而有效组织类的结构而提出的。可划分为3类:创建型(关于类的创建),结构型(多个类的组织),行为型(多个对象的组织)。
创建型模式包括5种:工厂模式(一个一个创建类,优化为用一个模子创建类)、抽象工厂模式(一个一个创建类,然后组装优化为一套模子创建类)、单例模式(简单常用,保证只有一个实例在运行)、构建模式(按同一步骤创建类),原型模式(从已有类copy新类)。
结构型模式包括7种:适配器模式(一个类+转接头=新的风格同一的类,加马甲)、桥接模式(说不清楚)、外观模式(一系列类加个马甲,再留几个接口,封装隐藏降低耦合)、组合模式(类似树,节点是可以包含其他节点的。这样的多个节点,可以组装成任意规模的“树”)、代理模式(类似用书包占座,次要的部分用代理类代替以提高性能降低耗时,当需要实际类时再通过代理类访问)、轻量模式(类极多或数目不定,无法预先获知。类似HTML标签和样式分离,标签只有有限个,采用对象池;而各式各样的样式则根据实际情况加载。轻量模式2个特点,对象池和“底子面子分离”)、装饰模式(在不改变类的情况下,给类新添不同的功能,如给图片类增加黑色边框锯齿形边框等,并且多个装饰可以叠加)。
行为型模式包括11种:责任链模式(按对象的链条逐个传递,典型应用Windows消息循环机制)、状态模式(将复杂的switch case语句分拆成一个个对象,对象根据状态的改变自动实现对应的功能)、策略模式(算法集,封装为多个可互相替换的算法,根据实际情况选择合适的算法)、命令模式(将不同操作归纳封装为抽象的命令,便于统一接口)、会议记录模式(主要是为了实现“撤销”功能,将操作记录下来,并且可以回滚到上一步操作)、模板模式(将共同的部分抽象成为模板)、迭代器模式(将集合对象的访问抽象为迭代器)、解释器模式(如正则表达式的匹配,将某一功能交给专门的类来解释,和代理比较相似)、观察者模式(抽象一“观察者”,将对象的变化通知所有相关的对象)、中介者模式(将多对多的对象联系概括为“中介者”,专门用于对象通讯)、访问者模式(不改变已有类结构基础上,以最小代价实现新增或变更功能,常常破坏封装性)
GoF 设计模式:浅浅印象的更多相关文章
- GOF设计模式特烦恼
这段时间,学习状态比较一般,空闲时基本都在打游戏,和研究如何打好游戏,终于通过戏命师烬制霸LOL,玩笑了.为了和"学习"之间的友谊小船不翻,决定对以往学习过的GOF设计模式做一个简 ...
- 在GoF设计模式
在GoF设计模式中,结构型模式有: 1.适配器模式 Adapter 适配器模式是将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. ...
- OOAD-设计模式(二)之GRASP模式与GOF设计模式概述
一.GRASP模式(通用责任分配软件模式)概述 1.1.理解责任 1)什么是责任 责任是类间的一种合约或义务,也可以理解成一个业务功能,包括行为.数据.对象的创建等 知道责任——表示知道什么 行为责任 ...
- 8.5 GOF设计模式四: 观察者模式Observer
GOF设计模式四: 观察者模式Observer 现实中遇到的问题 当有许多不同的客户都对同一数据源感兴趣,对相同的数据有不同的处理方式,该如 何解决?5.1 定义: 观察者模式 观察者模式 ...
- 8.4 GOF设计模式三: 外观模式 Facade
GOF设计模式三: 外观模式 Facade “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...
- 8.3 GOF设计模式二: 适配器模式 Adapter
GOF设计模式二: 适配器模式 Adapter 为中国市场生产的电器,到了美国,需要有一个转接器才能使用墙上的插座,这个转接 器的功能.原理?复习单实例模式 SingleTon的三个关键点 ...
- 8.2 GOF设计模式一: 单实例模式 SingleTon
GOF设计模式一: 单实例模式 SingleTon 整个美国,只有一个“现任美国总统” 比如,在学校,“老师”,有数百个:“校长”,只有一个 系统运行时,如何保证某个类只允许实例化一个对象 ...
- GOF设计模式快速学习
这段时间,学习状态比较一般,空闲时基本都在打游戏,和研究如何打好游戏,终于通过戏命师烬制霸LOL,玩笑了.为了和"学习"之间的友谊小船不翻,决定对以往学习过的GOF设计模式做一个简 ...
- GoF设计模式三作者15年后再谈模式
Erich Gamma, Richard Helm, 和 Ralph Johnson在GoF设计模式发表15年以后,再谈模式,另外一位作者,也是四色原型的发明者Peter已经过世. 提问者:如今有85 ...
随机推荐
- Git一些其它的功能
Git 开始之前我们配置过user.name和user.email.其实还有很多其他的配置项 例如:让Git显示颜色,会让命令输出来更醒目: $ git config --global color.u ...
- XueTr 0.45 (手工杀毒辅助工具) 绿色版
软件名称: XueTr 0.45 (手工杀毒辅助工具)软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 3.3MB图片预览: ...
- C++中##(两个井号)和#(一个井号)用法
C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念).下面对常遇到的宏的使用问题做了简单总结.关 于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化 ...
- 深入了解当前ETL的一些基本技术
数据集成是把不同来源.格式和特点的数据在逻辑上或物理上有机地集中,从而为企业提供全 面的数据共享,是企业商务智能.数据仓库系统的重要组成部分.ETL是企业数据集成的概念出发,简要分析了当前ETL中用到 ...
- 基于KNN的相关内容推荐
如果做网站的内容运营,相关内容推荐可以帮助用户更快地寻找和发现感兴趣的信息,从而提升网站内容浏览的流畅性,进而提升网站的价值转化.相关内容 推荐最常见的两块就是“关联推荐”和“相关内容推荐”,关联推荐 ...
- MySQL安装--ubuntu
1. 执行命令: $ apt-get install mysql-server 执行上述命令会自动安装mysql-client,mysql-common等包. 2. 安装过程中会让你给root账号设置 ...
- A框架第一步,传递不同参数.主程序执行对应方法
访问: www.test.com/admin 1============后台目录:admin (确保单一入口) --有入口文件index.php <?phprequire '../A/a.php ...
- 把aspx页面输出成xml的方法注意事项
先贴代码 Response.Charset = "gb2312"; Response.ContentType = "text/xml"; Response.Co ...
- iOS中date和string的相互转换
必须知道的内容 G: 公元时代,例如AD公元 yy: 年的后2位 yyyy: 完整年 MM: 月,显示为1-12 MMM: 月,显示为英文月份简写,如 Jan ...
- Linux常用Shell脚本珍藏【转载】
我们在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运维常用的脚本.如何学好脚本,最关键的 ...