Design Pattern 新解

移动机顶盒CM211-1刷机全教程:解锁晶晨S905L3的安卓自由 安卓机顶盒被运营商定制系统限制安装、篡改桌面,是许多用户选择刷机的直接原因。刷机本质是通过重写系统分区,绕过原厂引导约束,将设备底层芯片的完整性能释放出来。以晶晨S905L3系列主控为代表的高性价比盒子,通过线刷方式即可彻底替换为通用安卓系统,从而自由安装直播、影视、Kodi等应用,甚至改造为轻量NAS或旁路由。整个流程涉及短接点触发烧录模式、安装驱动、匹配固件、USB Burning Tool写入等关键环节,每一步都影响最终成败。本文以移动魔百盒CM211-1为例,从拆机识别硬件版本到线刷实操,系统梳理完 阅读详情
什么是 Design Pattern?许多人一讲到 Design Pattern,就会扯到什么建筑设计,因为他们全都是看四人帮的「Design Patterns」经典本的解释,没消化就照单全收。 如果不能用更生活化的方式解释 Design Pattern,我会怀疑他们是不是真的了解 Design Pattern 的真义。

什么是 Pattern
Pattern 最简单的定义是:只要是一再重复出现的事物,就是 Pattern。依照此定义,生活中就可以找到一堆 Pattern 的例子:

第四台广告中的 Pattern:

原价 ...,现在购买只要 ...,还送你一组 ...,请马上来电 ...,如忙线中请稍后再拨。
利用分割画面显示出使用前使用后的差别,来加强说服力。例如:由 C 升级到 E(注:C 和 E 不是指程序语言)。
找人现身说法:「杰瑞!感谢你介绍这套欧莱礼 Java 系列,让我在短短的三个月内成为公司内首屈一指的 Java 专家,这实在是太神奇了!」
选举时的 Pattern:

1. 质疑对手 A 钱或搞婚外情
2. 把家人通通拉上台痛哭一场以示选情告急
3. 开口唱「爱拼才会赢」

其它像是金光党的手法,刮刮乐诈财的技俩 ... 等,也都具有一再重复出现的特性,所以都可算是 Pattern。

电影中的 Pattern
电影中也有大量的 Pattern,请看下面的例子。

提高追杀时紧张程度的 Pattern

坏人追杀好人时,好人躲进车子,却发现车子发不动,引擎嘎嘎作响,一面努力地继续发动,一面念念有词「Come on, Come one」。
坏人追杀好人时,好人冲进电梯,死命地押着 close 按钮,脱口而出「Come on, Come one」。
许多电影都会使用上述两个 Pattern,虽然是老掉牙的 Pattern,但每次看到这里,总是让我紧张得心脏病差点发作,我不得不承认这两个 Pattern 实在是挺有效的。

增加主角杀死坏人合理性的 Pattern

电影最后,坏人和好人大对决,最后好人胜利,但是好人如果直接把坏人宰了,那好人在观众心中的形象就会受损,所以好人先饶坏人一条生路,但是坏人却坏到骨子里了, 偷偷拿出一把枪瞄准好人,说时迟那时快,好人机警地察觉,为了自保于是将坏人一枪毙命。这个 Pattern 可以让好人有人性,又让坏人死有余辜。

床戏的 Pattern

不管和剧情有没有关系,编剧和导演总爱加上一段激情的床戏。这个 Pattern 相当困扰我和我的家人,因为每次看到这里,我们保守的一家人往往觉得很尴尬,我们所反应出来的 Pattern 是:借口倒茶水,上厕所,打电话 ... 而离座避风头 ... 但眼睛仍不时偷瞄。

恐怖片的 Pattern

无须我举例,电影惊声尖叫(Scream)第一集就为我们剖析出恐怖片的一大堆 Pattern。

公式化
好莱坞的电影比较多 Pattern,而欧洲的电影比较少 Pattern。至于昆丁塔伦提诺(Quentin Tarantino)编导的电影,完全是不按排理出牌,很难找到 Pattern。正因为好莱坞的电影很容易就可以找出 Pattern,所以常常会有似曾相似的感觉。许多人批评好莱坞的电影很「公式化」。

基本上,Pattern 就是一种公式化的表现。那么,究竟公式化是不是好事?

以艺术来说,公式化的结果会造成僵化,所以负面效果居多。电影号称是「第八艺术」,也是一种艺术创作,所以最好不要出现太多 Pattern,否则肯定被影评人痛批「了无新意」。

以工程来说,公式化是好事。这些公式都是「千锤百炼」的结果,运用这些公式可以确保工程具备一定的品质,并加快工程的进行。而软件开发也是一项工程,也需要尽量运用公式。 (软件另有需要艺术的一面,这不在本文的讨论范围)。

什么是 Design Pattern
所以,Pattern 就是一种「千锤百炼」的智能结晶。有经验的专家和没经验的新手,差别就在于:有经验的专家知道如何在适当的时机,套用某些公式(Pattern)以解决特定 的问题,这是专家经年累月所培养出来的 Know-How(请参见「软件产业的知识经济」一文)。

一般来说,对象导向软件开发的程序可以粗略分成 OOA(对象导向分析)、OOD(对象导向设计)、OOP(对象导向实作)。在 OOD(Object-Oriented Design)阶段所采用的 Pattern 就称为 Design Pattern。运用良好的 Design Pattern,可以使得系统架构更优良(也更快完成),对于后续的 OOP、测试、维护,都会有很大的 帮助。Design Pattern 会告诉你,什么情况下用 Delegation 而不要用继承、什么情况下用 Interface 而不要用 Class... 诸如此类的知识。这些都是软件界前辈的智能结晶。

我要强调 Design Pattern 专指 Design 时期的 Pattern。但是 Coding 时的 Pattern(例如程序代码内缩)最好不要称为 Pattern,以免混淆。Coding 时期的 Pattern 最好称为 Coding Style(或 Code Style)。

Design Pattern 这个名词也可沿用到许多地方。我认为孙子兵法就是一本军事领域 Design Pattern 的书,它告诉你什么时候该采什么样的军事动作。至于怎么去砍人,则是属于 implementation 的部分,不属于孙子兵法的范围。

什么是 Anti-Pattern
并非所有的 Pattern 都是好的,不好的 Pattern 称为 Anti-Pattern。如果你的系统中出现了 Anti-Pattern,就表示你犯了别人「常犯的典型错误」。简言之,Anti-Pattern 就是错误的示范,要尽量避免。

让 Design Pattern 成为你的不时之需
许多人在设计阶段才来喟叹:「 Pattern 到用时方恨少。」其实你可以避免这样的情况。现在市面上有许多本 Design Pattern 和 Anti-Pattern 的书。只要好好把这些书读过,体会每个 Pattern 的真正涵义,你可以在短短的时间内,功力激增一甲子。即使读过的 Design Pattern,如果比较少用,一阵子之后也可能会忘记。 所以最好能隔一阵子就把 Design Pattern 的书拿出来复习。
【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 02 分布式多服务器管理算法 类别子类数量算法总数主要功能领域1. 负载均衡​12个子类150+算法请求分发、会话保持、健康检查2. 资源分配​15个子类180+算法CPU/内存/存储/网络分配3. 缓存管理​10个子类120+算法内容放置、替换、预取、一致性4. 队列管理​8个子类100+算法消息队列、任务队列、优先级队列5. 路由调度​12个子类150+算法路径选择、流量工程、拥塞控制6. 服务治理​10个子类120+算法服务发现、熔断、限流、降级7. 服务质量​8个子类90+算法SLA保障、QoE优化、准入控制8. 安全管控​12 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化——第十篇 芯片设计30 芯片中的数学1

所有涉及货币流动的岗位都受到严格的法律法规和行业准则约束,包括中国人民银行的各项货币政策工具管理规定、银行间市场交易规则、支付清算系统管理办法以及企业司库管理的相关指导意见。:在货币流动链条中,距离资金源头(央行投放)或关键流转节点越近的岗位,对资金的控制力、经手规模和影响力越大。处于资金流转的“管道”中,虽不直接决定资金量,但负责海量资金交易的安全、准确、高效清算,是货币流通的“基础设施”维护者。《关于规范金融机构资产管理业务的指导意见》(资管新规),要求信托业务打破刚性兑付,向净值化、标准化转型。

weixin_49199313的博客 410

Cocoa Touch Design Pattern - delegation(未完待续)

注:本文是一份学习笔记。 cocoa touch由苹果公司提供的软件开发api, 用于开发 iphone\ipod\ipad上的软件。也是苹果公司针对iPhone应用程序快速开发提供的一个类库。此库以一系列框架库的形式存在,支持开发人员使用用户界面元素构建图像化的事件驱动的应用程序。Cocoa Touch 层由多个框架组成,他们为应用程序提供了核心功能。  UIKit 负责启动和结束应用程序,控...

liuzhifuabc的专栏 187

海康工业相机LabVIEW二次开发实战——参数配置优化与图像高效存储

本文详细介绍了海康工业相机在LabVIEW平台上的二次开发实战,重点解析了相机参数配置的优化方法与图像高效存储策略。通过剖析曝光、增益、触发模式等核心参数的设置逻辑,并结合生产者-消费者设计模式,指导开发者构建稳定、高效的图像采集与异步存储流程,有效提升工业视觉项目的开发效率与系统稳定性。

weixin_29306317的博客 221

设计模式学习—业务代表模式(Business Delegate Design Pattern)

设计模式之业务代表模式,JavaEE模式

闲鱼的博客 2305

项目计划书、规划文档模板

项目计划书、规划文档模板 最近通过项目实践经历,整理出的一套项目计划书(仅供自己参考梳理思路使用) 有喜欢的文末加VX 辛苦码字如有转载请标明出处谢谢!——木研 更新的简版项目规划文档! 原版文件请+vx :baierfa ...

weixin_43194923的博客 987

手把手教你用ESP32驱动MAX30102心率血氧传感器(含完整代码)

本文详细介绍了如何使用ESP32微控制器驱动MAX30102心率血氧传感器,构建智能健康监测系统。内容涵盖PPG原理、硬件连接、驱动配置、信号处理算法以及Web服务器数据可视化,提供完整代码实现,帮助开发者快速上手物联网健康设备开发。

weixin_29208077的博客 586

Delegation Pattern

http://best-practice-software-engineering.ifs.tuwien.ac.at/patterns/delegation.html   Delegation Pattern "Delegation is like inheritance done manually through object composition." [Lecture slides

走马观花 968

ARM Cortex平台NEON指令集优化实战指南

本文为ARM Cortex平台开发者提供了一份全面的NEON指令集优化实战指南。文章从NEON的SIMD架构原理讲起,详细介绍了开发环境搭建、NEON内联函数与自动向量化两种核心编程方法、关键数据类型与指令,并通过图像饱和运算、矩阵乘法等实战案例,深入解析了性能调优技巧与常见避坑指南,旨在帮助开发者充分释放ARM处理器的并行计算潜力。

weixin_29162439的博客 259

C++基本功和 Design Pattern系列 Inheritance VS Delegation

http://blog.sina.com.cn/u/1261532101首先是const 和 reference的使用,这部分内容已经在C语言里说过,但是在C++里又有了一些扩展。 C++允许使用object作为参数传递,但是object有大有小。 比如下面一个object class:class CBitmap{public:    CBitmap();    ~CBitmap();

杨德龙的专栏 1967

1G/2.5G Ethernet PCS/PMA or SGMII

SGMII即Serial GMII,串行GMII,收发各一对差分信号线,时钟频率625MHz,在时钟信号的上升沿和下降沿均采样,所以总的数据速率为1.25Gbps=625Mbps*2。参考时钟RX_CLK由PHY提供,是可选的,主要用于MAC侧没有时钟的情况,一般情况下,RX_CLK不使用。收发都可以从数据中恢复出时钟。在TXD发送的串行数据中,每8比特数据会插入TX_EN/TX_ER 两比特控制信息,同样,在RXD接收数据中,每8比特数据会插入RX_DV/RX_ER 两比特控制信息。

sqzjiayou的博客 1万+

ADS基础教程24 - Gerber文件的导入

一、引言二、基本概念1.仿真文件下载2.仿真文件介绍二、导入步骤1.新建workspace2.选择Layout结构3.导入设计4.选择文件类型5.导入文件6.预览文件内容7.铜皮离散问题四、总结选择。通过本文章结束,可以了解ADS中如何将导入Gerber文件,并且对导入的铜皮进行合并。下一步就针对导入的文件进行层叠设置和编辑。END!}}END!

XZ_ZC的博客 3053

设计模式:Inheritance(继承) 和 Delegation(委托)

设计模式:Inheritance(继承) 和 Delegation(委托) 今天继续讲Design Pattern的内容。所谓 Design Pattern,翻译过来就是设计模式,是OO语言的一些基本运用。今天介绍Design Pattern中的两个基本概念,Inheritance(继承) 和 Delegation(委托)。 先定义一个位图类: class CBitmap { .

iw1210的专栏 5517

C++经典面试题100例及答案

答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。答:这样可以提高编译效率,因为分开的话只需要编译一次生成对应的.obj文件后,再次应用该类的地方,这个类就不会被再次编译,从而大大的提高了编译效率。答:这种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。答:常对象是指在任何场合都不能对其成员的值进行修改的对象。答:所谓的回调函数,就是预先在系统的对函数进行注册,让系统知道这个函数的存在,以后,当某个事件发生时,再调用这个函数对事件进行响应。

usstmiracle的博客 3万+

(转)Design Pattern 新解(非常经典贴近生活)

Design Pattern 新解什麼是 Design Pattern?許多人一講到 Design Pattern,就會扯到什麼建築設計,因為他們全都是看四人幫的「Design Patterns」經典本的解釋,沒消化就照單全收。 如果不能用更生活化的方式解釋 Design Pattern,我會懷疑他們是不是真的瞭解 Design Pattern 的真義。什麼是 PatternPattern 最簡單...

weixin_30505751的博客 139

基于STM32的录音机设计(STM32F103+VS1053B)

本项目设计并实现了一款基于STM32微控制器的便携式录音机。该录音机采用STM32F103C8T6作为主控芯片,结合VS1053B音频编解码模块、SD卡存储、OLED显示屏以及按键模块,提供了手动录音、自动录音和录音回放等多种功能。

1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Design Pattern 新解『转摘』

Design Pattern 新解什么是 Design Pattern?许多人一讲到 Design Pattern,就会扯到什么建筑设计,因为他们全都是看四人帮的「Design Patterns」经典本的解释,没消化就照单全收。 如果不能用更生活化的方式解释 Design Pattern,我会怀疑他们是不是真的了解 Design Pattern 的真义。什么是 PatternPat

『LSCNET专栏』 430

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

经典的Design Pattern的解释

Design Pattern 新解什麼是 Design Pattern?許多人一講到 Design Pattern,就會扯到什麼建築設計,因為他們全都是看四人幫的「Design Patterns」經典本的解釋,沒消化就照單全收。 如果不能用更生活化的方式解釋 Design Pattern,我會懷疑他們是不是真的瞭解 Design Pattern 的真義。什麼是 PatternPattern 最簡單

傲气游专栏 1592

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

本地生活服务系统:试单和正式开业的单为什么会进同一本账

本地生活服务系统应将试营业与正式运营的订单统一记入同一账本,通过“试单标记”区分,而非分设两本账。单号连续、信息唯一,避免重复或遗漏。正式账单仅提取“非试单且已付款”的记录,确保财务核算准确。过程查询则可查所有单据,便于客服追溯。关键在写入时即标注试单状态,开业日调整取出条件,不修改历史标记,保障数据可审计、可复原。

2509_93184100的博客 98

设计模式与生活⑰:空腹体检,单子领着人走

一年一度的体检,约在了周二。早上打完卡,没开电脑,先去体检机构——公司指定的那家。空腹,早饭留着查完再吃。前台登记,递身份证,领回一张指引单:姓名、条码,今天要查的项目按房间号排成一列。抽血、心电图、视力……单子一到手,人就被单子领着走了。先查哪项看哪边排队人少,但单子上的项目,一项落不下。去年也是这套流程。单子上的项目换了几样,走的科室还是那几个。身体还是这副身体,单子年年换。这事儿跟代码里的一种结构,是一回事。单子一到手,人就被单子领着走了今天聊的:元素稳定,操作多变;

工一木子 166

从零开始的C++生活——第八讲——01

这个和之前学的二叉树的层序遍历区别在于,这个要求将二叉树每一层的数据分别插入最后返回的数组中,这就需要进行一个思考,之前常规思路实现层序遍历时是队列出一个进来他的孩子,但是这种方式必然会造成不同层元素之间的混淆,我采用的方法是再用一个队列,专门用来存储本层元素,当每次出原队列元素时都需要在新队列中记录一份,此外,还需要一个变量计算此时原数列中本层元素个数,其实就是当前的元素个数,因为是一层一层进去的。相信在写完这三道题后,你一定对栈和队列的基本使用有了了解,下一节就是栈和队列的模拟实现。

dshswra的博客 176

第38章:ResNet+CBAM改进模型实战生活垃圾12分类

本文基于PyTorch实现ResNet+CBAM注意力模型,针对复杂场景下垃圾分类图像的遮挡、光照变化等问题,通过在ResNet各残差层后嵌入CBAM模块,实现通道与空间双重注意力增强,提升特征聚焦能力。项目包含数据预处理、迁移学习冻结策略、余弦退火优化、批量推理等全流程代码,支持12类垃圾识别,4600+图像数据集,开箱即用,完整记录训练日志与评估指标,显著提升模型在真实环境下的分类精度与鲁棒性。

Henry的博客 333

从零开始的C++生活——第八讲——02

当你想要获取第i个元素的时候,你需要拿到两个下标,一个是中控数组的下标,你需要知道它存放在哪个数组中,另一个是当前数组的下标,ptr[x][y]即是该元素,x的计算其实是用i/N,其中N是每个数组的大小,每个数组大小必须都是N,不然你计算会混乱。y的计算则是i%N。针对vector,它解决了扩容频繁以及空间浪费的问题,你一个数组存不下了,紧接着扩下一个数组就好,不会一下扩很多,而且vector在扩容时是需要大规模的拷贝数据的,deque也解决了这个问题,至于第二个缺点我一会再说。

dshswra的博客 217

从零开始的C++生活——第七讲——02

关于迭代器,由于你要进行操作符重载,所以我选择封装一个迭代器类,从底层的角度思考,你拿到任意一个类型的迭代器一般都是要访问迭代器所指向的空间的成员,所以我们其实应该拿到迭代器所指向节点的值,因此这也是一个模板类,而且,我们要对迭代器的解引用操作符和->操作符进行重载,重载即是分别拿到对应的值以及对应值的地址,除此之外,在遍历过程中我们需要对迭代器进行比较,因此需要重载==!增加的模板参数一个传T的引用,一个传T的地址,而const类型的迭代器则是传const T&和const T*。

dshswra的博客 85
上一篇: 软件产业的知识经济 (蔡学墉)
下一篇: RISC趋势:高速、多核与系统芯片
zaowei21
博客等级 码龄25年 38粉丝 517原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值