经典的Design Pattern的解释

轻量级Winform快速开发框架:设计、实现与实战应用 在C/S架构的桌面应用开发中,如何提升开发效率、保证代码质量并快速响应业务变化,是开发者面临的核心挑战。其原理在于通过分层架构、模块化设计和通用模式,将数据访问、用户界面、权限管理等通用功能标准化。这种技术方案的价值在于,它能将开发者从重复的“造轮子”工作中解放出来,专注于业务逻辑创新,显著缩短项目周期。典型的应用场景包括企业内部管理系统、中小型工具软件等需要快速迭代的Winform项目。本文聚焦于轻量级Winform快速开发框架的设计与实现,深入探讨了其**数据访问层(DAL)的抽象**与**权限管理模块 阅读详情
Design Pattern 新解


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

什麼是 Pattern
Pattern 最簡單的定義是:只要是一再重複出現的事物,就是 Pattern。依照此定義,生活中就可以找到一堆 Pattern 的例子:

第四台廣告中的 Pattern:
  1. 原價 ...,現在購買只要 ...,還送你一組 ...,請馬上來電 ...,如忙線中請稍後再撥。
  2. 利用分割畫面顯示出使用前使用後的差別,來加強說服力。例如:由 C 升級到 E(註:C 和 E 不是指程式語言)。
  3. 找人現身說法:「傑瑞!感謝你介紹這套歐萊禮 Java 系列,讓我在短短的三個月內成為公司內首屈一指的 Java 專家,這實在是太神奇了!」
選舉時的 Pattern:
  1. 質疑對手 A 錢或搞婚外情
  2. 把家人通通拉上台痛哭一場以示選情告急
  3. 開口唱「愛拼才會贏」
其它像是金光黨的手法,刮刮樂詐財的技倆 ... 等,也都具有一再重複出現的特性,所以都可算是 Pattern。

電影中的 Pattern
電影中也有大量的 Pattern,請看下面的例子。

提高追殺時緊張程度的 Pattern
  1. 壞人追殺好人時,好人躲進車子,卻發現車子發不動,引擎嘎嘎作響,一面努力地繼續發動,一面念念有詞「Come on, Come one」。
  2. 壞人追殺好人時,好人衝進電梯,死命地押著 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 的書拿出來複習。


本文作者:蔡學鏞
OOD - Object Oriented Design 面向对象设计实例 OOD 面向对象设计有很大的几率出现在小公司的面试上,在youtube上找了一个很好的教程来和大家分享一下。 问题: OOD 思想设计两人投掷硬币的游戏。 步骤一: 准备documentation 游戏介绍:随机选择一个玩家,令该玩家预测硬币的正反面,另一个玩家获得和第一个玩家相反的选项。开始投掷硬币,预测正确的赢。 Actors: 1. 玩家A 2. 玩家B  阅读详情

相关推荐

Introduction to Design Patterns in C++ with Qt(2nd) 无水印pdf

Introduction to Design Patterns in C++ with Qt(2nd) 英文无水印pdf 第2版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

几种常用的设计模式 (Design Pattern)

文章目录设计模式(Design Pattern)一、设计模式的分类1. 基础型模式 (Fundamental Pattern)2. 创建型模式 (Creational Pattern)3. 结构型模式 (Structural Pattern)4. 行为型模式 (Behavioral Pattern)5. 并发型模式 (Concurrency Pattern)二、设计模式详解1.工厂方法模式(Factory Method)应用场景缺点2.策略模式(Strategy Pattern)应用场景缺点3.访问者模式(

zhuyutong202的博客 3060

DNA pull-down技术避坑指南:从探针设计到质谱验证的完整实验方案

本文提供了一份详尽的DNA pull-down技术实战避坑指南,涵盖从探针设计、生物素标记、磁珠选择与预处理,到结合洗脱优化及下游质谱验证或Western Blot验证的全流程。重点解析了如何通过精细操作降低非特异性结合、提高实验特异性与重复性,并对比了质谱与WB两种验证路径的适用场景,旨在帮助研究者构建稳健可靠的DNA-蛋白质互作研究体系。

weixin_29274337的博客 494

教学管理系统 - OOD - 设计类图

总体设计 类学生 学生整体说明:类名:学生类的责任:用于参加课程继承:类用户状态机图:无被引用情况:选课清单、开课汇总表多重性:可以有多个实例主动性:是持久性:是属性说明:出了从用户继承下来的属性,无新属性生成操作说明:+选课(课程号):Boolean+查询课程内容(课程号):课程+查询教师(姓名,院系,专业):教师+查询本学期已选课程(学号):选课清单+查询已有成绩(学号):成绩+查询可选课程(...

鱼落池中 1万+

用Linkboy玩转Arduino:3小时搞定智能倒车雷达(附仿真文件下载)

本文详细介绍了如何利用Linkboy图形化编程工具,在3小时内快速搭建一个基于Arduino的智能倒车雷达项目。通过仿真环境,初学者无需硬件即可学习超声波测距原理、报警逻辑设计,并完成从虚拟仿真到实体硬件的完整流程。文章提供了清晰的步骤、调试技巧及功能扩展思路,并附有仿真文件,是入门Arduino和智能硬件制作的绝佳实践指南。

weixin_29159441的博客 403

Web自动化神操作:如何用OpenCV 破解滑块验证码?

验证码作为一种安全机制,可以有效防止暴力破解密码、发帖、灌水、刷票等,大家在做 Web 自动化的时候应该有碰到验证码这个难题,一般我们可以和开发沟通请求他们的帮助:去掉验证码或者设置一个万能验证码,而如果开发不帮忙我们该如何去解决呢? 本篇文章以 Java 语言为例教你怎么破解验证码。 现在大多数网址会采用滑块验证码的方式,下面以腾讯的滑块验证码为例,先来看看破解的效果: 要破解滑块验证码,我们一般采取的思路如下: 获取滑块到背景缺口图的距离 通过 selenium 的 Actio

不喝枸杞的程序员 2035

【前端知识点】设计模式(design pattern)的简介

设计模式 关于与“设计模式”名称相近或相同的条目,请见“设计模式 (消歧义)”。 在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的。 设计模式并不直接用来完成代码的编写

chaunceyw的博客 1067

【Dify精讲】第2章:后端服务架构深度剖析

Dify后端采用Flask应用工厂模式实现模块化开发,通过蓝图架构将API分为控制台、Web应用和服务接口三大模块。其设计亮点包括:1) 应用工厂模式支持多环境配置和独立测试;2) 蓝图分层管理实现API模块化,各模块职责清晰;3) 严格遵循RESTful原则设计API接口;4) 使用Flask-RESTful扩展简化API开发。这种架构既保持了Flask的灵活性,又实现了企业级应用的可维护性,是Flask项目架构的优秀实践案例。

wiyi9891的专栏 2126

Log4net使用总结,防止自定义的logger和root重复写入日志

一、在asp.net中使用log4net 1、添加log4net.dll引用 2、编辑配置文件,有两种做法:放在web.config里或放在单独的文件里,我们一般放在单独的文件里,这样做的好处--修改log4net的配置不会影响到整个应用重启 3、在Global.asax的Application_Start里加入如下代码 log4net.Config.XmlConfigurator.C...

大郭的涂鸦 871

从零开始:使用英伟达nx开发板部署目标检测算法的全过程

英伟达nx开发板烧录、依赖安装、开发板联网

weixin_51192760的博客 3761

Python爬虫实战:如何爬取12306列车信息

本文介绍了如何使用Python编写爬虫,抓取12306列车信息。我们讲解了如何分析12306的列车数据接口,如何发送HTTP请求,解析返回的JSON数据,并将数据保存到本地文件中。我们还讨论了如何绕过反爬虫机制,如使用随机User-Agent和设置请求延时。通过这个实战项目,你应该掌握了如何爬取并解析来自公共API的数据,同时提高了你的爬虫技能。这些技能不仅适用于12306列车信息抓取,也可以广泛应用于其他需要抓取JSON数据的网站。

2201_76125261的博客 1922

asp.net 使用Log4net

摘自:http://dong.hongjun888.blog.163.com/blog/static/2081208420104275496117/ 一、在asp.net中使用log4net 1、添加log4net.dll引用 2、编辑配置文件,有两种做法:放在web.config里或放在单独的文件里,我们一般放在单独的文件里,这样做的好处--修改log4net的配置不会影响到整个...

158

[PCIe5.0] 5.3.1.4.2 D3Cold State

主电源(Vcc)完全断开,仅保留极少量辅助电源(Vaux)用于维持基本唤醒功能设备功能完全关闭,所有寄存器状态丢失(除非有特殊存储)需要完全重新初始化才能恢复工作比D3Hot状态功耗更低,但唤醒延迟更长。

系统固件工程师 452

winform 下log4net简单应用示例及“缺少log4net引用”的处理方案

1.添加应用log4net.dll 2.新增log4net.config文件,文件内容如下 <?xml version="1.0" encoding="utf-8" ?> <configuration> <log4net> <root> <level value="ALL" /> &l...

weixin_30458043的博客 85

CMCC-IPC-A410串口刷机救砖教程

《CMCC-IPC-A410摄像头串口刷机指南》摘要 本指南针对2018年前老款CMCC-IPC-A410摄像头变砖/升级失败的情况,提供串口刷机方案。需准备CH340G串口模块、杜邦线、海康V5.5.82固件等工具。操作包含硬件连接(TX/RX交叉接线)、115200波特率终端配置、CTRL+U进入刷机模式,通过UPF格式化、tftp传输固件、update写入等步骤完成修复。刷机后设备恢复未激活状态,需重置密码,原定制功能可能失效。整个过程需稳定供电,耗时约15-20分钟,注意此操作将使原厂保修失效。(1

海康威视技术支持 1844

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

log4net配置

转:http://www.cnblogs.com/judgelee/archive/2012/06/18/2553849.html一、在asp.net中使用log4net1、添加log4net.dll引用2、编辑配置文件,有两种做法:放在web.config里或放在单独的文件里,我们一般放在单独的文件里,这样做的好处–修改log4net的配置不会影响到整个应用重启3、在Global.asax的App

BlueCY 878

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

log4net三端日志可靠性调优:文件、控制台与PostgreSQL协同实践

日志系统是分布式应用可观测性的基石,其核心诉求在于不丢、不乱、不慢。理解日志框架的底层调度机制(如事件分发、Appender生命周期、同步/异步IO模型)是保障可靠性的前提。log4net作为C#生态主流日志组件,其FileAppender、ConsoleAppender和AdoNetAppender并非配置即用,而需针对滚动策略、线程安全、连接池、批量写入、结构化存储等关键维度深度调优。尤其在PostgreSQL日志落库场景中,连接泄漏、单条INSERT性能瓶颈、JSON上下文建模等问题直接影响系统稳定性

weixin_34185320的博客 488

OV9734 DATASHEET,完整规格书

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

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

log4Net 无法输出文件的问题排除

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33948416的博客 407

Serilog结构化日志实战:从原理到生产避坑指南

结构化日志是现代可观测性的基石,它将传统字符串日志升级为带Schema的事件数据流,支持字段级索引、范围查询与实时聚合分析。其核心原理在于日志事件的JSON化建模与上下文自动注入,技术价值体现在搜索效率提升10倍以上、故障定位时间缩短80%、运维分析从手工脚本转向Grafana/Seq可视化。典型应用场景包括微服务链路追踪、支付系统异常下钻、K8s容器日志治理等。本文聚焦Serilog这一主流.NET结构化日志框架,深入解析Sink配置、Enricher上下文增强与Filter精准过滤三大生产必备要素。

weixin_34008784的博客 370

彻底搞懂设计模式DesignPattern-23种设计模式整理

设计模式介绍 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案, 设计模式(Design pattern)代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式的本质提高 软件的维护性,通用性和扩展性,并降低软件的复杂 度。 <<设计模式>> 是经典的书,作者是 Erich Gamma、 Richard Helm、 Ralph Johnson 和 John Vlissides

Ping 1106

OOD面向对象的设计方法

OOD是一种解决软件问题的设计范式(paradigm),一种抽象的范式。使用OOD这种设计范式,我们可以用对象(object)来表现问题领域(problem domain)的实体,每个对象都有相应的状态和行为。我们刚才说到:OOD是一种抽象的范式。抽象可以分成很多层次,从非常概括的到非常特殊的都有,而对象可能处于任何一个抽象层次上。另外,彼此不同但又相互关联的对象可以共同构成抽象:只要这些对象之间...

微小的鱼的博客 4546

ood学习笔记

面向对象是一种系统建模技术。通过分析系统内对象的交互来描述或建模一个系统。交互的对象最终以类的形式组织。 若一个类的改动会导致另一个类的改动,则称为两个类之间存在依赖。 一个系统的分析和设计过程: 首先是了解业务,画用例图(找Actor——>找Use Case——>细化用例——>写用例文档;); 然后画顺序图,

u010520477的专栏 843
上一篇: 设计模式汇总(一)
下一篇: 自动获取网通电信IP列表
allkill
博客等级 码龄24年 0粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值