设计模式之我爱我家

大话设计模式之爱你一万年:第五章 创建型模式:原型模式:为爱找份工作:1.原型模式概念 最近一阵子为了我的女朋友,不是造宝马(BMW520/BMW521)就是造电脑,资金耗费有点大。虽然我家大业大,但也耗不住我这么折腾呢,于是我决定找份工作好好磨练下自己,为爱找份工作,为爱加上期限 – 爱你一万年。 找工作不得写简历吗,我就写呀写呀… 为了提高我投简历的准确性,我觉得简历要写的多样化,不能全写一模一样,比如说我的期望薪资不能写成一样,因为我希望能够根据目标企业的情况来投递合适薪资的简历,这样中标概率大一点。 这大部分简历信息都是一样了,这要是每一份都重复的写,那不得累坏宝宝... 阅读详情

目录:
1、ABSTRACT FACTORY---抽象工厂
2、BUILDER---生成器
3、FACTORY METHOD---工厂方法
4、PROTOTYPE---原型
5、SINGLETON---单件
6、FACTORY METHOD---工厂方法
7、ADAPTER----适配器
8、COMPOSITE---组合模式
9、DECRATOR---装饰
10、FAÇADE---外观
11、FLYWEIGHT---享元
12、行为模式
13、COMMAND----命令
14、INTERPRETER---解释器
15、ITERATOR---迭代器
16、MEDIATOR---中介者
17、MEMENTO?备忘录
18、OBSERVER---观察者
19、STATE---状态
20、STRATEGY---策略模式
21、TEMPLATE METHOD---模板方法
22、VISITOR----访问者模式

创建型模式
ABSTRACT FACTORY---抽象工厂
  定义:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类
  使用频率:
  使用情景:
  HappyFather 和 HapperMother吵架了,HappyFather 回家发现桌子上一张纸条写着“做家务”,于是HappyFather 开始擦地板、刷马桶、收拾房间、做饭,足足忙了好几个小时,终于理解HappyMother的辛苦后主动道歉
情景解释:“做家务”相当于抽象工厂,HappyFather 根据它做一系列相关的家务.
其他应用:在多个产品的系统或者类库中只需调用抽象工厂就可以创建需要实现的子部分

BUILDER---生成器
  定义:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。
  使用频率:
  使用情景:
  HappyMother很奇怪为什么HappyFather每次都能够把衣服弄得污渍、汗渍、血渍一团糟,这么脏的衣服要先经过手洗,然后才能放到洗衣机中一起洗
情景解释:一个复杂对象的各个部件分别创建,针对洗衣服这个过程一部分机洗和一部分手洗(复杂的部分)
  应用要点:与抽象工厂的区别是其最终只返回一个对象,而抽象工厂返回一系列相关对象

FACTORY METHOD---工厂方法
  定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method 使一个类的实例化延迟到了子类
  使用频率:
  使用情景:
  每个月1日是Happy 家庆祝的日子,因为这天是HappyFather发工资的日子
  HappyFather:“你今天做的饭真香”
  HappyMother:“肉多了就香,儿子这50块钱是你这个月的零花钱!”
  HappyFather:“记住不许去网吧上网,那个地方总着火”
  情景解释:HappyMother 把零花钱给HappySon至于什么时候花,买什么东西就由HappySon自己决定了

PROTOTYPE---原型
  定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型赖创建新的对象
  使用频率:
  使用情景:
  HappyMother :“每天都要买菜、洗菜、炒菜 ,我烦了不管做了”
  HappyFather:“老婆最近超市开始供应蔬菜拼盘,各种蔬菜都已经搭配好了,我去买一盘素三鲜,一盘鱼香肉丝,买回去炒一下就行了,方便的很”
  HappyMother:“ I Like It !”

  情景解释:各种蔬菜拼盘就是炒菜的原型,炒一下就能吃了
  应用要点:PROTOTYPE克隆自身从而创建新的对象

SINGLETON---单件
  定义:保证一个类只有一个实例,并提供一个访问他的全局访问点
  使用频率:
  使用情景:
  HappyFather:“乖儿子不许拿这个玩!”
  HappySon:“老爸这个是什么呀? ”
  HappyFather:“这个呢是咱家的户口本,开始呢只有我的户口页,后来增加了你妈的户口页,后来又增加了你的户口页,以后还会增加你儿子的,儿子的孙子的,子子孙孙的。。。。。。”

  情景解释:全家只有一个户口本,通过增加户口页来访问它
  其他应用:计数器,购物车

结构型模式
ADAPTER----适配器
  定义:将一个类的接口转换成客户希望的另外一个接口,Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
  使用频率:
  使用情景:
  时间:1960年自然灾害期间
  HappyMother:“他爸,孩子就要上学了,可一件像样的衣服也没有呀”
  HappyFather:“有什么办法呀!饭都吃不饱哪有钱买衣服呀,不然你把我的衣服改一下!”
  HappyMother:“Good Idea !” 就这样HappyFather的衣服被改成了HappySon的衣服

  情景解释:HappyFather 的衣服通过HappyMother 的裁剪变成了HappySon 的新衣服的衣服
  应用要点:ADAPTER 适用于已经存在的类,但接口不符。

BRIDGE---桥接
  定义:将抽象部分与它的实现部分相分离,使他们可以独立的变化
  使用频率:
  使用情景:
  Happy:Mother:“你说负责打扫房间却只管扫地,你说你做饭却叫外卖,你说你每天早上六点打鸣去总用闹表”
  HappyFather:“你也知道我总是说一套做一套呀”

  情景解释:“说”是抽象部分和“做”相分离
  应用要点:抽象和实现部分分别放在独立的类层次结构中

COMPOSITE---组合模式
  定义:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性
  使用频率:
  使用情景:
  Happyson 两周岁
  HappyMother 告诉HappyFather :“儿子要是闹着不睡觉,你可以给他唱歌,也可以摇晃他,也可以边唱歌边摇晃”
  HappySon:“我不要爸爸摇,跟座过山车似的”

  情景解释:哄儿子睡觉的方法很多,也可以将几个方法结合使用,所有的方法都可以统一对待
  应用要点:组合部分能够像单个对象一样调用,例如遍历树结构。

DECRATOR---装饰
  定义:动态的给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活
  使用频率:
  使用情景:
  时间:2003年夏 非典期间
  HappyFather:“老婆,你怎么在我的口罩上绣字了呀”
  HappyMother:“这样口罩不但可以防病毒还美观呀”
  HappyFather:“可为什么要绣上‘别吻我’呀”
  HappyMother:“提醒汽车司机不要撞到你呀”

  情景解释:为口罩增加了额外的功能
  应用要点:将组件嵌入对象而不是使用继承机制

FAÇADE---外观
  定义:为子系统中的一组接口提供一致的界面,FA?ADE 提供了一个高层接口,这个接口使得子系统更容易使用
  使用频率:
  使用情景:
  由于HappyFather和HappySon 放纵饮食吃成了两个胖墩,HappyMother 将冰箱锁在一个屋子里,爷俩只能通过HappyMother 才能吃到各种零食。不过HappyMother负责跑腿,爷俩也是不亦舒服。
情景解释:HappyMother 类似于Happy父子拿零食的接口, Happy父子只需吩咐她就行了
  应用要点:降低客户程序和子系统的耦合度

FLYWEIGHT?享元
  使用频率:
  使用情景:
  HappyFather:“老婆咱家有没有Flyweight 模式的例子呀”
  HappyMother:“老公 什么是Flyweight 模式呀”
  HappyFather:“就是运用共享技术有效地支持大量细粒度的对象”
  HappyMother:“那杯子算不算呀?可以用来泡茶、泡咖啡、和你打架的时候还可以做暗器”
  HappyFather:“。。。 。。。”

  模式解释:杯子作为共享对象,可以同时在不同的场景中使用,只是根据它的外部状态,所起的作用不同
  应用要点:分离对象的内部和外部状态,根据不同的外部状态应用于不同的场景达到共享对象

PROXY---代理
  定义:为其他对象提供一种代理以控制对这个对象的访问
  使用频率:
  使用情景:
  HappySon学校校长办公室
  校长:“你要好好教训一下你的儿子,他在学校里面和同学打架了”
  HappyFather:“小孩子之间打打闹闹很正常呀”
  校长:“和别人打打闹闹正常,可是他把我儿子打哭了”
  HappyFather:“啊!对不起,回家我一定好好教训他”
  HappyFather 回家后教训HappySon:“我告诉你记住了,下次打谁也不要打校长的儿子”

  情景解释:HappyFather 是 HappySon的监护人也就是代理
  应用要点:Proxy 只提供对实体的访问,实体定义关键功能。

行为模式:
  CHAIN OF RESPONSIBILITY---职责链
  定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系
  使用频率:
  使用情景:
  HappySon:“老妈 这个题不会做了帮帮我”
  HappyMother:“要先这样然后在这样就行了”
  HappySon:“老妈 这个又不会了”
  HappyMother:“这个我也不会,问你老爸去吧”
  HappyFather:“这么简单呀,你们俩去看电视吧,我做完了叫你”

  情景解释:HappyFathe和 HappyMother都有辅导HappySon功课的职责,谁会谁就帮忙处理
  应用要点:请求没有明确接收者,通过后继者链进行传递请求

COMMAND----命令
  定义:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作
  使用频率:
  使用情景:
  HappyFather :“KFC 吗?我要一大瓶可乐,我老婆要一中瓶可乐,我儿子要一小瓶还要一个外卖桶”
  半个小时后
  HappyFather:“我这个大瓶可以不要吗”
  KFC送货员:“对不起先生,你预定的就要付钱呀”
  HappyFather:“可是Command 模式支持可撤销操作呀”
  KFC送货员:“对不起先生,我只是个送外卖的”

  情景解释:定餐就是Command 模式,每个人都有不同的请求
  应用要点:Command 声明执行操作的接口

INTERPRETER---解释器
  定义:给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子
  使用频率:
  使用情景:
  19××年某天,HappySon 九个月大
  Happyson:“哇….哇”
  HappyMother :“孩他爸快拿尿布来”
  HappySon:“哇哇….哇”
  HappyMother:“老公,快冲奶粉,儿子饿了”
  HappySon:“嘻…..嘿嘿”
  HappyMother:“亲爱的,儿子饭后要看你表演!”

  情景解释:happyson的语言 只能由 HappyMother 解释给HappyFather 听
  应用要点:将发生频率高的实例表述成一个简单语言的中的句子

ITERATOR---迭代器
  定义:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示
  使用频率:
  使用情景:
  HappyFather :“快播,琼窑的连续剧都是无病呻吟”
  HappyFather :“快播,中国足球比我的脚都臭”
  HappyFather:“跳过中央九台 ,全是鸟语听不懂”
  HappyFather:“就看这台吧 ,养眼”
  HappyMother 上来爆K HappyFather
  HappyFather:“别打脸,明天还要上街买菜呢!”
  原来HappyFather 要看的是模特大赛

  情景解释:所有的电视台就是一个可以顺序访问的集合
  应用要点:将对列表的访问和遍历从列表对象中分离出来并放入迭代器对象中

MEDIATOR---中介者
  定义:用一个中介对象封装一些列的对象交互
  使用频率:
  使用情景:
  工作调动关系,Happy一家临时搬到了××市,因为××市的人特别不好相处,所以Happyfather 通过房屋中介所租房子:房租资金,配套设施只需和中介所交涉,然后中介所再和房东协商,这样就避免了和房东的直接联系

  情景解释:中介所起到了中介的作用
  应用要点:将对象之间的交互操作封装到MEDIATOR(中介者)中介者对象中

MEMENTO?备忘录
  定义:在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态
  使用频率:
  使用情景:
  HappyMother:“有出息了你!不是让你去刷马桶嘛,居然敢看电视!”
  HappyFather:“今天是咱们结婚纪念日,我在看那天的结婚录像”
  HappyMother:“算你有良心,还记得这个日子”

  情景解释:结婚录像就是备忘录
  应用要点:记录对象在某个瞬间的内部状态以支持取消操作机制

OBSERVER---观察者
  定义:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新
  使用频率:
  使用情景:
  美国进攻伊拉克,HappyFather 每天读报了解最新消息,HappyMother 每天看电视获得最新消息,HappySon每天上网浏览最新消息,战况变化,一家人通过不同的对象获取最新消息

  情景解释:报纸、电视、网络的新闻都是依赖于伊拉克战况的
  其他应用:数据变化时用于数据显示的表格、图相应跟随改变

STATE---状态
  定义:允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类
  使用频率:
  使用情景:
  HappyFather 工作劳累病倒了
  HappyMother:“老公,快起来吃药”
  HappyMother:“老公,起来吃点水果”
  HappyMother::“老公,不要作家务,快去休息”
  嘿嘿,这么舒服,HappyFather 病好了还想在床上赖两天
  HappyMoterh :“你怎么还不起来收拾房间?”
  HappyFather :“我…我 病还没有好”
  HappyMother:“装!往死里装!”
  HappyFather :“得不得病态度差这么多呀!”

  情景解释:得病和病好了是两种不同的状态
  应用要点:将所有与一个特定状态相关的行为都放入一个对象中

STRATEGY---策略模式
  定义:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户
  使用频率:
  使用情景:
  小王两年前借HappyFather的钱至今未还,正好这天小王来Happy 家做客(正是要帐的好机会)。
  首先旁敲侧击法
  HappyFather:“前两天我见到咱们的老同学小李了,他还了我1000元钱,说是两年前借的,他要是不还呀,我都忘了”
  小王:“是呀,小李的记性就是好,比我强多了”
  居然没奏效,下一招诱蛇出洞
  HappyFather:“听说你最近生意不错呀,怎么样成本都收回来了嘛?债务都还上了吗?”
  小王:“还算红火,债务基本上还清了”
  看来只能单刀直入了
  HappyFather:“那你借我的2000元也该还了吧!”

  情景解释:针对向小王要帐这个事情,HappyFather 采用了三个办法,办法之间可以相互替换,这些方法对谁都有作用的。
  应用要点:用类封装不同的算法而不是将算法直接硬编码到代码中

TEMPLATE METHOD---模板方法
  模式定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod 使得子类可以不改变一个算法得结构即可以重定义该算法得某些特定步骤。
  使用频率:
  使用情景:
  HappyMother 递给HappyFather 一本毛衣编织教学书:“选个你喜欢得样式,天冷了我给你织件毛衣”
  HappyFather:“你?织毛衣?我没有听错吧!”
  HappyMother:“这算什么,有了这本书,毛裤我也会织!”

  情景解释:毛衣编织教学的书就相当一个模板,HappyMother 可以根据上面的样式织自己喜欢的毛衣
  其他应用:模板可以作为核心业务的抽象,客户层针对不同的业务具体实现,达到复用核心业务的目的

VISITOR----访问者模式
  模式定义:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作
  使用频率:
  使用情景:
  您在为自己的冰箱闲职无用而发愁吗?Happy家原来也是,不过现在不用发愁了HappyFather 买了一整头猪回来,而且还做了一份详细的计划:猪头煮熟了做凉菜,猪腿呢就做水晶肘子,猪的前榜可以肉馅。。。。。。。,不过如果你的冰箱不够大可不要学HappyFather的做法

  情景解释:针对猪的不同位置可以采用不同的做法,就像遍历对象所有的节点,针对不同的节点采用不同的操作。
  应用要点:Visitor包含两个类层次:一个对应接收操作的对象,另一个对应定义对元素的操作的访问者

VIL-SLAM论文翻译:Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping 文章目录写在前面摘要1.引言2.相关工作3.系统概述4.视觉前端5.双目视觉惯性里程计A. IMU预积分因子B. 非结构化视觉因子C. 优化和边缘化6. 激光建图A. LiDAR扫描去畸变B. 帧到地图配准7. LiDAR增强的闭环A. 回环检测B. 回环约束C. 全局位姿图优化D. 重定位8. 实验结果A.平台和软件B.测试和结果C. EuRoCMAV数据集测试9.结论 写在前面 写作参考: robot L 开源代码: 开源代码链接 论文原文: 原文链接 摘要 SLAM是移动和空中机器人的一项基本任务 阅读详情

相关推荐

ADP在线自适应动态规划之持续激励条件

在线自适应动态规划之持续激励条件 在在线自适应动态规划算法中,需要通过满足持续激励条件(Persistent Excitation Condition)保证critic网络权值的收敛性,一般的做法都是在算法初期在输入端引入探测噪声(Probing Noises)来保证数据的丰富性,但是由于在输入端引入噪声会给系统带来一些不好的影响,甚至可能破坏系统的稳定性。因此,出现了一些其他的方法来避免引入探测噪声,受阅读所限,我目前了解两种: Concurrent Learning(CL) Experience Re

qq_43435956的博客 6162

设计模式之我爱我家(上)

模式无处不在,这里讲述的是happy一家的故事:Happyfather,HappyMother还有HappySOn .本文纯属虚构,如有雷同 那实在是太巧和了。行为模式:CHAIN OF RESPONSIBILITY---职责链定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系使用频率:  使用情景:   HappySon:“老妈 这个题不会做了帮

1540

基于PlatformIO与CMSIS的STM32库函数开发实战:从环境搭建到外设驱动

本文详细介绍了基于PlatformIO与CMSIS的STM32库函数开发实战,从环境搭建到外设驱动实现。通过对比传统IDE,PlatformIO结合CMSIS框架在跨平台开发、代码可移植性和调试体验上更具优势。文章包含PlatformIO.ini配置详解、GPIO/USART驱动开发实例及常见问题解决方案,帮助开发者高效完成STM32项目开发。

weixin_29190169的博客 424

设计模式之我爱我家(下)

创建型模式ABSTRACT FACTORY---抽象工厂定义:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类使用频率:  使用情景:HappyFather 和 HapperMother吵架了,HappyFather 回家发现桌子上一张纸条写着“做家务”,于是HappyFather 开始擦地板、刷马桶、收拾房间、做饭,足足忙了好几个小时,终于理解Happy

1196

数字逻辑EduCoder课设项目 厨房计时器系统设计 Logisim实现

数字逻辑EduCoder课设项目 厨房计时器系统设计 Logisim实现

weixin_51693702的博客 1万+

VSCODE编辑+EIDE插件调试+STM8_Debug插件调试+IAR_STM8工具链编译开发项目

1. 安装 在VS CODE安装EIDE、STM8-Debug插件 2. 使用 EIDE 创建一个 8/16 Bit MCU 项目 新建虚拟文件夹,把工程外部的文件添加进虚拟文件夹,实现工程和源文件之间的关系,而不用实际把源文件复制到工程目录下。 EIDE工程和源文件实现分开放置,EIDE(EIDE工程)、EWSTM8(IAR STM8工程)、Project(ST Visual Develop工程) 选择工具链 烧录工具选择 头文件包含目录 添加宏定义 3. 编译 4. 使用STM8

TrueLink的博客 5500

[转贴]感谢优快云blog梦开始的地方,他总结的很好,推而广之,收藏先!设计模式之我爱我家

创建型模式ABSTRACT FACTORY---抽象工厂  定义:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类  使用频率:   使用情景:  HappyFather 和 HapperMother吵架了,HappyFather 回家发现桌子上一张纸条写着“做家务”,于是HappyFather 开始擦地板、刷马桶、收拾房间、做饭,足足忙了好几个小时,终于理解HappyMothe

GoodSpeed的专栏 609

别再折腾框架了!用华为应用市场官方渠道搞定GBOX,安全安装谷歌全家桶(鸿蒙HarmonyOS 3/4实测)

本文详细介绍了如何在鸿蒙系统上通过华为应用市场官方渠道安全安装GBOX,实现谷歌全家桶的无损使用。该方法避免了传统破解方式的安全风险,利用沙箱技术隔离运行环境,确保系统稳定性和数据安全。特别适合鸿蒙HarmonyOS 3/4用户安全使用谷歌生态应用。

weixin_29305313的博客 4805

静态代理-实现老外来中国买房

静态代理-实现老外来中国买房 简单说一原理和场景 原理:1.真实角色 2.代理角色 3.二者要实现相同的接口 场景: 1.真实角色老外 2.代理角色我爱我家代理 3.相同接口也就是行为:买房 4.增强行为美元兑换人民币,通知领证 运行结果: 静态代理一个简单设计模式,希望大家可以学会! ...

weixin_40323340的博客 135

什么是以太网链路聚合

以太网链路聚合技术通过将多个物理端口捆绑成逻辑端口,可显著提升网络性能。该技术能增加总带宽(各链路带宽之和)、提高可靠性(故障秒级切换)并实现智能负载分担。主要分为手工模式和基于LACP协议的动态模式,后者能检测链路故障更可靠。配置时需确保接口参数一致、模式匹配,适用于核心交换、服务器接入等场景。华为设备通过创建Eth-Trunk接口、指定LACP模式并添加成员接口即可完成部署。这项成熟技术能以低成本解决带宽瓶颈和可靠性问题,是构建高速稳定网络的关键方案。

lai_2020的博客 675

【29】软考软件设计师——SQL语句编写与优化深度精讲|数据库大题延伸满分攻略

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第29篇,承接第28篇ER图转关系模式核心内容,作为**下午第2题数据库大题核心延伸必考模块**,单模块累计占分5~8分,是数据库板块性价比极高的提分重点。全文超4000字深度拆解软考全部SQL高频考点:全覆盖多表连接底层逻辑、嵌套子查询分类实操、GROUP BY分组聚合硬核规则、索引全品类设计原理、联合索引最左匹配底层机制,搭配海量可直接复刻的考场SQL模板、历年真题完整改写案例、索引失效场景实操复盘、慢查询优化落地技巧。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 527

100+幅漫画!带你轻松学会设计模式

AI时代对程序员的设计能力提出了更高的要求。很多人说设计模式难学,是因为已有的经典图书的文字过于晦涩,代码难以理解,类似的教材或参考资料增加了认知负荷。为此,李一鸣(笔名“爱码叔”)老师写作了《漫画设计模式》。这本书用生动形象的漫画和故事勾勒出一个个设计模式的应用场景,再加上简单易懂的代码,认知负荷被大大降低。帮助大家轻松在设计模式之路上打怪练级!下面,让我们跟随李一鸣老师走进《漫画设计模式》,看...

程序猿DD 886

Android Framework SurfaceFlinger面试题及参考答案

请简述 SurfaceFlinger 在 Android 系统中的作用。 SurfaceFlinger 是 Android 系统中一个非常关键的服务。它主要负责将多个应用程序的 Surface 合成到一个屏幕显示内容中。 从应用程序的角度来看,每个应用都有自己的 UI 界面,这些 UI 界面实际上是由一系列的图层(Surface)构成。例如,一个应用可能有背景图层、按钮图层、文本图层等。应用通过向 SurfaceFlinger 提供这些 Surface 来请求显示。 SurfaceFl

大模型大数据攻城狮的专栏 1187

简明设计模式

<br /><br />设计模式 收藏<br />转贴:http://www.cnblogs.com/zhenyulu/articles/36058.html<br /> <br />来源:亚历山大的建筑模式、Gamma等人(1995)创作的"Design Patterns: Elements of Reusable Software"。这本书通常被称作"Gang of Four"或"GoF",开创性的创造了《设计模式》。<br /> <br />也有人说"三十六计"就是"模式"。<br /> <br />

T T的记忆 5657

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

设计模式

转贴:http://www.cnblogs.com/zhenyulu/articles/36058.html来源:亚历山大的建筑模式、Gamma等人(1995)创作的"Design Patterns: Elements of Reusable Software"。这本书通常被称作"Gang of Four"或"GoF",开创性的创造了《设计模式》。也有人说"三十六计"就是"模式"。一、

somewhere117的专栏 1977

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

设计模式——23种设计模式学习总结

声明:本文为个人笔记,用于学习研究使用非商用,内容为个人研究及综合整理所得,若有违规,请联系,违规必改。 23种设计模型学习总结

明哲的博客 493

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【23种设计模式专题】二 工厂模式

通过两个人对话的方式,来说一说简单工厂、工厂方法模式、抽象工厂模式

程序猿学社的博客 6471

游戏程序常规设计模式

            游戏程序常规设计模式       https://gpp.tkchu.me/spatial-partition.html                                               二O一 八 年 十二 月于上海浦东新区   第一章 序   游戏设计模式 在五年级时,我和我的朋友被...

蛰伏--当你不够强大时,就不要放弃努力 1万+

Java 设计模式-模版方法模式

java 设计模式-模版方法模式

精神小牛马 5282

设计模式之Facade——家庭篇(原创)

设计模式之Facade——家庭篇 今年十一国庆节,我呆在家里美美的享受了一下家的温馨。首先让我来介绍一下我的家庭成员:妻子(Wife)女儿(Daughter)我(Me)我们都是家庭(Family)的一分子,我们是以家庭对外的。就象我们国家对外是以“中国”,外国人都称我们是中国人,但在中国这个大家庭内部,包括了汉、回、蒙、。。。等56个民族一样。可见对外我们是要以统一的身

lxgljj的专栏 8041

设计模式之Facade——家庭篇

设计模式之Facade——家庭篇今年十一国庆节,我呆在家里美美的享受了一下家的温馨。首先让我来介绍一下我的家庭成员:妻子(Wife)女儿(Daughter)我(My)我们都是家庭(Family)的一分子,我们是以家庭对外的。就象我们国家对外是以“中国”,外国人都称我们是中国人,但在中国这个大家庭内部,包括了汉、

Alinker 1018

设计模式六大原则之白话讲解

前言 一个好的程序猿,不应该只是埋头code,更不应该只懂得CV大法。个人认为,一段好的代码,离不开算法和设计模式。 概述 设计模式有六大原则,分别为单一职责原则、开放封闭原则、里氏替换原则、依赖倒置原则、迪米特原则和接口隔离原则。 接下来,分别对这六大原则进行学习、分析。 1.单一职责原则 定义 就一个类而言,引起他变化的原因应该有且仅有一个! 解释 字面意思理解,就是only you!也就是...

墨玉浮白的博客 750

我们身边的模式——读《Head First设计模式》

2个月,我想,要不是工作很忙,也许我会读的更快些。和经典的《设计模式》不同,这本书写的很浅显,但是浅显并不意味着没有含金量,这个渐显,更多的是让人理解起来很容易。《设计模式》很深,个人感觉不应该作为学习模式的第一本书。这本《深入浅出设计模式》用来做基础读物,再适合不过。书中并没有将GOF的23种设计模式全部涵盖,但是他却通过我们身边最经常碰到的事情,慢慢将模式的面纱接下,然后将她带入你的大脑,

深红 2081

MyBatis与设计模式的激情碰撞

最近一直在研究MyBatis的源码,MyBatis作为国内最为经常使用的持久层框架,其内部代码的设计也是极其优秀的!我们学习源码的目的是什么呢? 一方面是对该框架有一个很深入的认识,以便在开发过程中有能力对框架进行深度的定制化开发或者在解决BUG的时候更加得心应手! 一方面是学习代码里面优秀的设计,看看这些成名多年的框架,他们的开发者是如何设计出一个高扩展性、低耦合性的代码呢?然后在自己的开发场景中应用。 今天我们就来讨论一下,在MyBatis内部,为了提高代码的可读性究竟做了哪些设计呢?当然,如果你对

皇甫嗷嗷叫 283

设计模式理解

 原创  设计模式之我爱我家(上) 收藏模式无处不在,这里讲述的是happy一家的故事:Happyfather,HappyMother还有HappySOn .本文纯属虚构,如有雷同 那实在是太巧和了。行为模式:CHAIN OF RESPONSIBILITY---职责链定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系使用频率: 

ldongwei的专栏 484

23种设计模式的“十大误解”

23种设计模式的“十大误解”时间:2009-07-25 18:46来源:赛迪网 作者:赛迪网 点击: 429次<br />现在“模式”这个词真是非常流行。就象任何流行的东西一样,对它的误解也真是不少。甚至在一些发表出来的文章中,也存在着各种各样的误解, 我想这会对读者造成非常糟糕的引导作用。早已想写一篇文章来澄清一些对模式的误解,却又因为水平所限难以成文。恰在此时, 我看到John Vlissides先生的《十大误解》,于是我便乐得当文抄公了。<br />  关于设计模式,下面有十种错误的观点——很多都是很

SPIChina的专栏 756
上一篇: Session详解
下一篇: 深入探索C++对象模型 之 构造,解构,拷贝语意学
C_plus_learner
博客等级 码龄22年 0粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值